Как извлечь десятичную часть datenum из Matlab?

1

У меня есть следующий код в 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

Каким будет код equilvent в python для получения десятичной части данных, то есть 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
  • 0
    Как насчет dn = datenum(d); decimalpart = dn - floor(dn); ?
Теги:
datetime

1 ответ

4

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

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

Сказав это, я думаю, что вы рассчитываете не то, что, по вашему мнению, вы рассчитываете. Похоже, что в базе данных Matlab полностью игнорируется часть часового пояса объекта datetime, которая, как я подозреваю, может быть не такой, какой вы планировали. Вы можете проверить это, подтвердив, что datenum(d) дает тот же результат, что и datenum(datevec(d)).

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню