我必须将MATLAB的datenum转换为Python的datetime
。
以下代码如下:
import datetime
matlab_datenum = 63650571169.50261
python_datetime = datetime.date.fromordinal(int(matlab_datenum)) + \
datetime.timedelta(days=matlab_datenum%1) - datetime.timedelta(days=366)
print(matlab_datenum)
上面的代码生成了这个错误:
OverflowError: Python int too large to convert to C long
如何解决这个问题?
答案 0 :(得分:0)
你的datenum距离matlab时代只有几秒钟。要转换为datetime
,您需要将该秒数偏移到python理解的datetime
。此函数使用Unix纪元作为参考。
<强>代码:强>
import datetime as dt
# define some constants
epoch = dt.datetime(1970, 1, 1)
matlab_to_epoch_days = 719529 # days from 1-1-0000 to 1-1-1970
matlab_to_epoch_seconds = matlab_to_epoch_days * 24 * 60 * 60
def matlab_to_datetime(matlab_date_num_seconds):
# get number of seconds from epoch
from_epoch = matlab_date_num_seconds - matlab_to_epoch_seconds
# convert to python datetime
return epoch + dt.timedelta(seconds=from_epoch)
测试代码:
print(matlab_to_datetime(63650571169.50261))
<强>结果:强>
2017-01-01 10:12:49.502609