gpt4 book ai didi

python - 为什么 datetime.now() 和 datetime.today() 在我的电脑上显示 UTC 时间而不是本地时间?

转载 作者:太空狗 更新时间:2023-10-29 17:48:25 26 4
gpt4 key购买 nike

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 中注意到的那样, TZ 环境变量是这里的关键。在 unix 类型的系统上,这支持更“友好”的值,例如“US/Pacific”,或者实际上是“America/Denver”,但在 Windows 上,它不支持。虽然它在 Windows 上不可用,但 documentation for the time.tzset 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。)这种格式的结构是:

  • 标准时间缩写 (MST)
  • 标准时间的 UTC 偏移量,以小时 (+07) 为单位
  • 夏令时缩写
  • 当夏令时开始时(见下文)
  • 当夏令时结束时(见下文)

夏令时开始和结束的格式是:

  • M(表示“基于月份”)
  • 月份 - 3 月 3 日或 11 月 11 日,在本例中。
  • 一个月中的第几周 - 1 到 5,表示以下指定日期的第 1 到第 5 次。
  • 星期几 - 0 表示星期日到 6 表示星期六

还有一些选项可以指定夏令时开始和结束的时间(但默认为 02:00:00,所以在这种情况下不需要)和夏令时的偏移量(但默认为 1 小时,所以也没有必要)。

(edit) 事实证明这实际上是一个 glibc 特性,而不是直接一个 python 特性。 glibc docs 中的更多详细信息.

关于python - 为什么 datetime.now() 和 datetime.today() 在我的电脑上显示 UTC 时间而不是本地时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47563103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com