【发布时间】:2019-10-18 18:40:16
【问题描述】:
我有包含 datenum 值的 .mat 文件(即 735724.3229166666、735725.6756944444 等)。
我的目标是在不损失精度的情况下将其转换为日期时间格式,换句话说,它应该像使用 matlab 一样精确。
我非常清楚这些答案: Converting Matlab's datenum format to 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 中它仍然不同。有人可以帮忙吗?
【问题讨论】:
-
为什么您认为第三个选项是最好的?我假设您的输入是
2014-05-05 07:45:00?如果是这样,它的误差为 2.8e-5,高于前两个结果的 3e-6。 -
@Daniel,我需要准确的分钟数,:59 和 :00 在我的情况下有所不同
-
所以你对比秒更小的东西不感兴趣?如果是这样,请将您的时间四舍五入到最接近的秒数。
标签: python matlab datetime time