我刚开始从Matlab迁移到Python 2.7,但在读取.mat文件时遇到一些麻烦。时间信息以Matlab的datenum格式存储。对于那些不熟悉它的人:
序列号代表日历日,表示自固定基准日期起已过去的天数。在MATLAB中,序列号1为0000年1月1日。 MATLAB还使用串行时间表示从午夜开始的几分之一秒。例如,下午6点等于0.75个连续日。因此,MATLAB中的字符串‘31 -Oct-2003,6:00 PM’是日期编号731885.75。 (摘自Matlab文档)
序列号代表日历日,表示自固定基准日期起已过去的天数。在MATLAB中,序列号1为0000年1月1日。
MATLAB还使用串行时间表示从午夜开始的几分之一秒。例如,下午6点等于0.75个连续日。因此,MATLAB中的字符串‘31 -Oct-2003,6:00 PM’是日期编号731885.75。
(摘自Matlab文档)
我想将其转换为Pythons的时间格式,并找到了本教程。简而言之,作者指出
如果您使用python解析此datetime.fromordinal(731965.04835648148)结果,则结果看起来可能很合理[…]
datetime.fromordinal(731965.04835648148)
(在进行任何进一步的转换之前),这对我不起作用,因为datetime.fromordinal需要一个整数:
>>> datetime.fromordinal(731965.04835648148) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: integer argument expected, got float
虽然我可以将它们四舍五入以获取每日数据,但实际上我需要导入分钟时间序列。有人对此问题有解决方案吗?我想避免重新格式化.mat文件,因为其中有很多文件,而我的同事也需要与他们一起工作。
您链接到解决方案,它有一个小问题。它是这个:
python_datetime = datetime.fromordinal(int(matlab_datenum)) + timedelta(days=matlab_datenum%1) - timedelta(days = 366)
在这里可以找到更长的解释