У меня есть файл .mat со значениями datenum (т.е. 735724.3229166666, 735725.6756944444 и т. Д.).
Моя цель - преобразовать его в формат datetime без потери точности, другими словами, он должен работать с такой же точностью, как иэто сработало бы с Matlab.
Мне прекрасно известны эти ответы: Преобразование формата datenum в Matlab в Python
Но ни один из них не работает так точно, потому что Python округляет все после десятичной дроби почти в каждомчисловая операция.
Например, те функции, которые я написал, основаны на ответах по ссылке выше:
def datenum_to_datetime1(datenum):
days = datenum % 1
return datetime.fromordinal(int(datenum)) \
+ timedelta(days=days) \
- timedelta(days=366)
def datenum_to_datetime2(datenum):
days = np.float_(datenum) % 1
return datetime.fromordinal(int(datenum)) \
+ timedelta(days=days) \
- timedelta(days=366)
def datenum_to_datetime3(datenum):
return pd.to_datetime(datenum-719529, unit='D')
def datenum_to_datetime4(datenum):
origin = np.datetime64('0000-01-01', 'D') - np.timedelta64(1, 'D')
date = datenum * np.timedelta64(1, 'D') + origin
return date
Если я попробую их на 735724.3229166666, я получу:
- 2014-05-05 07: 44: 59.999997
- 2014-05-05 07: 44: 59.999997
- 2014-05-05 07: 45: 00.000028800
- 2014-05-05
Третий вариант является наиболее точным, но с Matlab он все же отличается. Может кто-нибудь помочь?