Python中Matlab的datenum(datestring)的等价函数

yus*_*suf 7 python matlab

在Matlab中,当我运行" datenum "函数时如下;

datenum(1970, 1, 1);
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

719529
Run Code Online (Sandbox Code Playgroud)

我正在尝试找到相同的函数或脚本,它会给我相同的输出.但是,遗憾的是,我无法在互联网上找到足够的解释来做到这一点.

我看过这个教程:https://docs.python.org/2/library/datetime.html,但它没有帮助.

你能告诉我,我如何在python中获得相同的输出?

谢谢,

Sir*_*lot 6

我将使用datetime模块和toordinal()函数

from datetime import date

print date.toordinal(date(1970,1,1))

719163
Run Code Online (Sandbox Code Playgroud)

要获取日期,您将使用

print date.toordinal(date(1971,1,2))

719529
Run Code Online (Sandbox Code Playgroud)

或者更容易转换

print date.toordinal(date(1970,1,1))+366

719529
Run Code Online (Sandbox Code Playgroud)

我认为该日期不对的原因是由于datenum从1月0日至0000年开始计数,而这不能识别为有效日期。您必须通过在年份和日期中增加一个来抵消开始日期中的更改。该月份无关紧要,因为datetime中的第一个月等于datenum中的0


小智 6

前面的答案返回一个整数。MATLAB 的 datenum 不一定返回整数。以下代码返回与 MATLAB 的 datenum 相同的答案:

from datetime import datetime as dt

def datenum(d):
    return 366 + d.toordinal() + (d - dt.fromordinal(d.toordinal())).total_seconds()/(24*60*60)

d = dt.strptime('2019-2-1 12:24','%Y-%m-%d %H:%M')
dn = datenum(d)
Run Code Online (Sandbox Code Playgroud)