Equivalent function of datenum(datestring) of Matl

2020-07-09 16:38发布

In Matlab, when I run "datenum" function as the following;

datenum(1970, 1, 1);

I get the following output:

719529

I'm trying to find the equivalent function or script which is gonna give me the same output. But, unfortunately I couldn't find an enough explanation on the internet to do this.

I have looked at this tutorial: https://docs.python.org/2/library/datetime.html, but it didn't help.

Could you tell me, how can I get the same output in python?

Thanks,

标签: python matlab
3条回答
兄弟一词,经得起流年.
2楼-- · 2020-07-09 17:19

You can substract date objects in Python:

>>> date(2015, 10, 7) - date(1, 1, 1)
datetime.timedelta(735877)

>>> (date(2015, 10, 7) - date(1, 1, 1)).days
735877

Just take care to use an epoch that is useful to your needs.

查看更多
家丑人穷心不美
3楼-- · 2020-07-09 17:21

I would use the datetime module and the toordinal() function

from datetime import date

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

719163

To get the date you got you would use

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

719529

or for easier conversion

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

719529

I believe the reason the date is off is due to the fact datenum starts its counting from january 0, 0000 which this doesn't recognize as a valid date. You will have to counteract the change in the starting date by adding one to the year and day. The month doesn't matter because the first month in datetime is equal to 0 in datenum

查看更多
我命由我不由天
4楼-- · 2020-07-09 17:22

The previous answers return an integer. MATLAB's datenum does not necessarily return an integer. The following code retuns the same answer as MATLAB's 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)
查看更多
登录 后发表回答