将MATLAB的datenum转换为Python的datetime时出错

时间:2017-03-30 11:41:08

标签: python matlab datetime

我必须将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

如何解决这个问题?

1 个答案:

答案 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