簡體   English   中英

python mktime(.timetuple())在Mac和Linux中返回不同的結果

[英]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之前並不存在。

或者,如果您確實將輸入視為本地時間,則適用其他答案:

如何在Python中將本地時間轉換為UTC?

注意

當您問“如何返回UTC?”時,您必須意識到您的原始代碼已經做到了:時間戳始終被視為距UTC紀元幾秒鍾的時間。 的確如此,這就是為什么在以不同時區開頭的平台上獲得不同結果的原因: '2016-07-01' (隱含時間00:00:00 )是一個不同的實際時刻,具體取決於查看的時區如在。

s.timetuple()部分s.timetuple()並不在意,但這是time.mktime()部分將本地時間轉換為UTC時間戳的主要目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM