Как извлечь десятичную часть datenum из Matlab? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть следующий код в Matlab.

timestamp = 1478084255 ;
TimeZone = 'Europe/Amsterdam' ;
CorrectionToMATLABTime = datenum(1970, 1, 1, 0, 0,0) ;

matlab_timestamp = CorrectionToMATLABTime + timestamp/86400 ;
d = datetime( datevec(matlab_timestamp), 'TimeZone', 'UTC' );
d.TimeZone = TimeZone ; 
datenum(d)

# 736636.498321759

Каким будет эквивалентный код в python , чтобы получить десятичную часть datenum, т.е. 0.498321759?

Вот что я сделал:

from datetime import datetime
import pytz

tz = pytz.timezone('UTC')
date_utc = datetime.fromtimestamp(1478084255).astimezone(tz)
first_date = datetime(date.year, 1, 1, tzinfo=tz)
(date_utc - first_date).seconds/(60*60*24)
# 0.45665509259259257

1 Ответ

0 голосов
/ 17 сентября 2018

Чтобы ответить на ваш вопрос в точных выражениях:

import datetime
import pytz
tz = pytz.timezone('Europe/Amsterdam')
d = datetime.datetime.utcfromtimestamp(1478084255).replace(tzinfo = pytz.utc)
d = d.astimezone(tz).replace(tzinfo = pytz.utc)
f = datetime.datetime.combine(d.date(), datetime.time()).replace(tzinfo=pytz.utc)
(d-f).total_seconds() / (60* 60* 24) # 0.498321759

Сказав это, я думаю, что вы рассчитываете не то, что вы думаете, что вы рассчитываете.Кажется, что datenum в matlab полностью игнорирует часть '1004 * объекта timezone, что, как я подозреваю, может оказаться не тем, что вы намеревались.Вы можете проверить вышеизложенное в этом случае, подтвердив, что datenum(d) дает тот же результат, что и datenum(datevec(d)).

Возможно, стоило бы явно спросить, что вы ожидаете Выйдите из этого вычисления в словах, просто чтобы убедиться, что он действительно соответствует коду, который вы предоставили.Что вы пытаетесь сделать именно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...