2 回答
TA贡献1799条经验 获得超6个赞
time.mktime()解释timetuple基于本地计算机的时区。请注意您的timetuple对象如何不包含任何时区信息,因此创建的时间戳将始终根据本地计算机上设置的时区而变化。因此完全可以理解为什么time.mktime(local_dt.timetuple())在这两台机器上相同的返回不同的值。
您可以local_dt.timestamp()改用,而两者本质上是相同的...
datetime假设Naive实例表示本地时间,并且此方法依赖于平台 Cmktime()函数来执行转换。
...但是由于您是timestamp直接从非原始datetime对象创建的,它仍然保留时区信息并可以相应地改变时间:
对于感知datetime实例,返回值计算如下:
(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
自未传递时区信息以来,最后一次作为本地时间time.mktime()处理utc.timetuple()。您会注意到它偏移了 18000(time.timezone对于 EST,我的时区)。
添加回答
举报