我在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
答案 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))
相同的结果来检查上述情况。
也许值得明确地询问您期望是什么,以便也用文字摆脱这种计算,只是检查它是否确实与您提供的代码相对应。您到底想做什么?