我刚刚开始从Matlab转到Python 2.7,并且在阅读我的.mat文件时遇到了一些麻烦。时间信息以Matlab的datenum格式存储。对于那些不熟悉它的人:将Matlab的datenum格式转换为Python
序列日期数字表示一个日历日期表示一个日历日期为自固定基准日以来经过的天数。在MATLAB中,序列日期编号1是0000年1月1日。
MATLAB还使用连续时间来表示从午夜开始的几分之几;例如下午6点。等于连续0.75天。所以MATLAB中的字符串'31 -Oct-2003,6:00 PM'是日期号731885.75。
(从MATLAB资料为准)
我想将其转换为蟒蛇时间格式,我发现this tutorial。总之,笔者指出
如果你分析这个使用Python的
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文件,因为它们中有很多和我的同事需要与他们一起工作。
如果有帮助,someone else asked for the other way round。可悲的是,我对Python太陌生,不能真正理解那里正在发生的事情。
/编辑(2012-11-01):这已在上面发布的教程中修复。
我转换'matlab_datenum'到'int'馈入'fromordinal'之前。 – Blender
@Blender:你说得对。固定。 – carlosdc
或更简单:'python_datetime = datetime.fromordinal(int(matlab_datenum) - 366)+ timedelta(days = matlab_datenum%1)':) –