如何提取Matlab datenum的小数部分?

时间:2018-09-12 19:12:41

标签: python matlab datetime

我在matlab中获得了以下代码。

timestamp = 1478084255 ;
TimeZone = 'Europe/Amsterdam' ;
CorrectionToMATLABTime = datenum(1970, 1, 1, 0, 0,0) ;

matlab_timestamp = CorrectionToMATLABTime + timestamp/86400 ;
d = datetime( datevec(matlab_timestamp), 'TimeZone', 'UTC' );
d.TimeZone = TimeZone ; 
datenum(d)

# 736636.498321759

python 中要获取datenum小数部分(即0.498321759)的等价代码是什么?

这是我所做的:

from datetime import datetime
import pytz

tz = pytz.timezone('UTC')
date_utc = datetime.fromtimestamp(1478084255).astimezone(tz)
first_date = datetime(date.year, 1, 1, tzinfo=tz)
(date_utc - first_date).seconds/(60*60*24)
# 0.45665509259259257

1 个答案:

答案 0 :(得分:4)

要准确回答您的问题:

import datetime
import pytz
tz = pytz.timezone('Europe/Amsterdam')
d = datetime.datetime.utcfromtimestamp(1478084255).replace(tzinfo = pytz.utc)
d = d.astimezone(tz).replace(tzinfo = pytz.utc)
f = datetime.datetime.combine(d.date(), datetime.time()).replace(tzinfo=pytz.utc)
(d-f).total_seconds() / (60* 60* 24) # 0.498321759

话虽如此,我认为您正在计算的并不是您认为在计算的。看来matlab的datenum完全忽略了datetime对象的“时区”部分,我怀疑这可能不是您想要的。您可以通过确认datenum(d)得到与datenum(datevec(d))相同的结果来检查上述情况。

也许值得明确地询问您期望是什么,以便也用文字摆脱这种计算,只是检查它是否确实与您提供的代码相对应。您到底想做什么?