0

我有工作代码。我的问题是为什么这行得通?

#"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 标志”,但有许多使用 DST 的时区。那么它如何检测正确的时区呢?

4

2 回答 2

2

它通过 stdlib C 时间函数向您的操作系统询问该信息。

引用time模块文档

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

您可以为 DST 标志传入 -1 以让库为您设置它,请参阅time.struct_time. 在我为欧洲/奥斯陆时区配置的 Mac OS X 10.7.5 设置中,这给了我:

>>> 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
于 2013-01-22T20:49:59.907 回答
1

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

于 2016-12-28T12:11:10.733 回答