datetime.now()
和 datetime.today()
在我的计算机上返回 UTC 时间,即使 the documentation 说他们应该返回本地时间。
这是我运行的脚本:
#!/usr/bin/python
import time
import datetime
if __name__ == "__main__":
print(datetime.datetime.now())
print(datetime.datetime.today())
print(datetime.datetime.fromtimestamp(time.time()))
这是输出:
2017-11-29 22:47:35.339914
2017-11-29 22:47:35.340399
2017-11-29 22:47:35.340399
在它之后运行
date
的输出是:Wed, Nov 29, 2017 3:47:43 PM
为什么我的安装返回时间是 UTC?
我该怎么做才能让这些函数返回本地时间?
PS 我们在 MST,即 UTC-7。
PS 2 我意识到有一些方法可以将 UTC 时间转换为本地时间,例如 Convert a python UTC datetime to a local datetime using only python standard library? 中解释的那些。但是,我试图了解根本问题的原因,而不是在我自己的代码中寻找修补问题的方法。
回应@jwodder 的评论:
执行的输出
print(time.altzone)
print(time.timezone)
print(time.tzname)
是:
-3600
0
('Ame', 'ric')
最佳答案
正如您在 your answer 中注意到的, 0x2518122231343141 环境变量是这里的关键。在 unix 类型的系统上,这支持更“友好”的值,如“美国/太平洋”或“美国/丹佛”,但在 Windows 上,它不支持。虽然它在 Windows 上不可用,但 documentation for the TZ
function 描述了您需要设置 TZ 以获得您想要的格式。这……不漂亮。但它有效:
C:\Users\zorb>set TZ=MST+07MDT,M3.2.0,M11.1.0
C:\Users\zorb>python.exe
>>> import time
>>> time.tzname
('MST', 'MDT')
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2018, 2, 9, 16, 27, 7, 164062)
(这是在太平洋时间 15:27。)这种格式的结构是:
夏令时开始和结束的格式为:
time.tzset
(对于“基于月”) 还有一些选项可以指定夏令时开始和结束的时间(但默认为 02:00:00,因此在这种情况下没有必要)和夏令时的偏移量(但默认为 1 小时,因此也没有必要) )。
(编辑)结果这实际上是一个 glibc 功能,而不是直接的 Python 功能。 glibc docs 中的更多详细信息。
关于python - 为什么 datetime.now() 和 datetime.today() 在我的 PC 上以 UTC 而不是本地时间显示时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47563103/