2 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
time.mktime()解釋timetuple基于本地計(jì)算機(jī)的時(shí)區(qū)。請(qǐng)注意您的timetuple對(duì)象如何不包含任何時(shí)區(qū)信息,因此創(chuàng)建的時(shí)間戳將始終根據(jù)本地計(jì)算機(jī)上設(shè)置的時(shí)區(qū)而變化。因此完全可以理解為什么time.mktime(local_dt.timetuple())在這兩臺(tái)機(jī)器上相同的返回不同的值。
您可以local_dt.timestamp()改用,而兩者本質(zhì)上是相同的...
datetime假設(shè)Naive實(shí)例表示本地時(shí)間,并且此方法依賴于平臺(tái) Cmktime()函數(shù)來(lái)執(zhí)行轉(zhuǎn)換。
...但是由于您是timestamp直接從非原始datetime對(duì)象創(chuàng)建的,它仍然保留時(shí)區(qū)信息并可以相應(yīng)地改變時(shí)間:
對(duì)于感知datetime實(shí)例,返回值計(jì)算如下:
(dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
觀察:
>>> est = datetime.datetime(1999, 12, 31, 19, 0).astimezone(pytz.timezone('EST'))
>>> utc = est.astimezone(pytz.timezone('UTC'))
>>> est
datetime.datetime(1999, 12, 31, 19, 0, tzinfo=<StaticTzInfo 'EST'>)
>>> utc
datetime.datetime(2000, 1, 1, 0, 0, tzinfo=<UTC>)
>>> est.timestamp()
946684800.0
>>> utc.timestamp()
946684800.0 # same as est
>>> time.mktime(est.timetuple())
946684800.0
>>> time.mktime(utc.timetuple())
946702800.0 # different than est
自未傳遞時(shí)區(qū)信息以來(lái),最后一次作為本地時(shí)間time.mktime()處理utc.timetuple()。您會(huì)注意到它偏移了 18000(time.timezone對(duì)于 EST,我的時(shí)區(qū))。
添加回答
舉報(bào)