[英]python mktime(.timetuple()) returns different results in mac and linux
我注意到time.mktime(.timetuple())
在mac和linux(ubuntu)上返回了不同的時間。 為什么這個?
date = ['2016-07-01', '2016-07-05']
xdata = [datetime.datetime.strptime(str(s), "%Y-%m-%d") for s in date]
xdata = [time.mktime(s.timetuple()) * 1000 for s in xdata]
print xdata
# ----mac--
>> [1467356400000.0, 1467702000000.0]
#-----linux---
>> [1467345600000.0, 1467691200000.0]
如何以UTC退回?
我標記為將其重復,但是如果您將原始輸入視為UTC開頭,則實際上不是這樣。 如果您不確定(尚不完全清楚),則只需將calendar.timegm
替換為time.mktime
。
>>> d = datetime.datetime(2016, 9, 1)
>>> calendar.timegm(d.timetuple())
1472688000
或者您可以自己做:
>>> EPOCH = datetime.datetime(1970, 1, 1)
>>> def dt2utcstamp(d):
... return (d - EPOCH).total_seconds()
接着:
>>> dt2utcstamp(d)
1472688000.0
我通常會做后者,因為我幾乎無法記住所有愚蠢的時間和日期函數的作用;-)但是timedelta.total_seconds()
方法在Python 3.2之前並不存在。
或者,如果您確實將輸入視為本地時間,則適用其他答案:
當您問“如何返回UTC?”時,您必須意識到您的原始代碼已經做到了:時間戳始終被視為距UTC紀元幾秒鍾的時間。 的確如此,這就是為什么在以不同時區開頭的平台上獲得不同結果的原因: '2016-07-01'
(隱含時間00:00:00
)是一個不同的實際時刻,具體取決於查看的時區如在。
s.timetuple()
部分s.timetuple()
並不在意,但這是time.mktime()
部分將本地時間轉換為UTC時間戳的主要目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.