如果没有时区信息,pythons mktime如何工作?

时间:2013-01-22 20:46:24

标签: python time

我有工作代码。我的问题是为什么这样做?

#"04/13/05 2:30pm EDT" <- original date string
from datetime import datetime, timedelta
from pytz import timezone
import pytz
import time

T= time.struct_time((2005,4,13,14,30,0,0,0,1))
t = time.mktime(T)

print(t)

打印

1113417000, 

根据在线转换器,http://www.epochconverter.com/,打印

Your time zone: 4/13/2005 2:30:00 PM GMT-4

这是正确的。我的问题是,它如何知道EDT的时间是GMT-4? 9元组中的最后一个是“dst flag”,但是有许多时区使用DST。那么它如何检测正确的时区?

2 个答案:

答案 0 :(得分:2)

它通过stdlib C time functions向您的操作系统询问该信息。

引用time module documentation

  

此模块中定义的大多数函数调用具有相同名称的平台C库函数。查阅平台文档有时可能会有所帮助,因为这些函数的语义因平台而异。

您可以为DST标志传递-1以让库为您设置它,请参阅time.struct_time。在我的Mac OS X 10.7.5设置中,为Europe / Oslo时区配置,这给了我:

>>> import time
>>> time.mktime((2005,4,13,14,30,0,0,0,-1))
1113395400.0

或,由epochconverter'翻译':

Your time zone: 4/13/2005 2:30:00 PM GMT+2

答案 1 :(得分:1)

根据documentation函数time.mktime(t)采用以本地时间表示的参数(struct_time),而不是UTC。本地时间取自您的操作系统。您可以使用例如time.tzname

查看当地的夏令时区时区