【问题标题】:Python: strftime, gmtime not respecting timezonePython:strftime,gmtime 不尊重时区
【发布时间】:2011-06-14 21:12:06
【问题描述】:
import time
print time.strftime("%a, %d %b %Y %I:%M %p %Z", time.gmtime())

我住在加利福尼亚。出于某种原因,此代码以 GMT 报告时间,而不是尊重系统时区。我知道 strftime 知道我在太平洋,因为它最后仍然打印“PST”,但它仍然提前 8 小时。有其他人注意到这一点吗?有人知道我的系统或代码有什么问题吗?

编辑: 在命令行运行 date 会给我正确的日期。此外,我已经在两台不同的计算机(mac 和 linux)上运行了它,它们都提前 8 小时报告。您是否希望在使用 strftime 之前更正时区?

【问题讨论】:

  • 如果你只是在命令行上运行“date”会怎样?会不会是您的计算机时间设置为 GMT,但有加利福尼亚时区?

标签: python timezone


【解决方案1】:

time.gmtime() 以 UTC 格式返回时间。你需要的是time.localtime(),它时区感知的。这种行为在 time module documentation 中有详细记录。

编辑:

要将任何time.time() 样式的时间戳转换为struct_time,您可以提供一个参数 time.localtime():

>>> print time.strftime("%a, %d %b %Y %I:%M:%S %p %Z", time.localtime(10.5))
Thu, 01 Jan 1970 02:00:10 AM EET

【讨论】:

  • time.localtime() 很棒,但我从 UTC 文件中获取时间戳。如何将时区从 UTC 转换为我的本地时区?
  • @Shaun:您可能会发现pytz 对于更多涉及的时区转换很有用。 time.localtime 在处理当前不存在的时间戳时会遇到一些问题(例如,在夏令时更改之后的过去或未来等)。
  • 如果有人想知道:10.5 只是纪元后 10.5 秒的时间。通常会有类似time.time()1596618141 的东西。
【解决方案2】:

要更改 unix 系统上的时区,请执行以下操作:

ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

/usr/share/zoneinfo/ 中浏览以找到您想要的内容并更改上面的命令

【讨论】:

  • 不是我的反对意见,但这似乎是对一个完全不同的问题的答案。
猜你喜欢
  • 2013-03-22
  • 2011-11-23
  • 2011-03-28
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
相关资源
最近更新 更多