小编典典

将Matlab的datenum格式转换为Python

python

我刚开始从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文档)

我想将其转换为Pythons的时间格式,并找到了本教程。简而言之,作者指出

如果您使用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文件,因为其中有很多文件,而我的同事也需要与他们一起工作。


阅读 220

收藏
2020-12-20

共1个答案

小编典典

您链接到解决方案,它有一个小问题。它是这个:

python_datetime = datetime.fromordinal(int(matlab_datenum)) + timedelta(days=matlab_datenum%1) - timedelta(days = 366)

这里可以找到更长的解释

2020-12-20