将时间从 UTC 转换为 CST

Posted

技术标签:

【中文标题】将时间从 UTC 转换为 CST【英文标题】:converting time from UTC to CST 【发布时间】:2021-04-10 05:58:36 【问题描述】:

我正在尝试将 UTC 时间转换为 CST。但我没有得到预期的输出。

下面是我的代码:

import datetime
import pytz
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
e = pytz.timezone('US/Central')

time_from_utc = datetime.datetime.utcfromtimestamp(int(1607020200))
time_from = time_from_utc.astimezone(e)
time_from.strftime(fmt)
time_to_utc = datetime.datetime.utcfromtimestamp(int(1609785000))
time_to = time_to_utc.astimezone(tz=pytz.timezone('US/Central'))
print(time_from_utc)
print(time_from)
print(time_to_utc)
print(time_to)

这是输出:

(base) ranjeet@casper:~/Desktop$ python3 ext.py 
2020-12-03 18:30:00
2020-12-03 07:00:00-06:00
2021-01-04 18:30:00
2021-01-04 07:00:00-06:00

我期望在转换后,我应该得到与 UTC 时间相对应的时间,即

2020-12-03 18:30:00
2020-12-03 12:30:00-06:00

因为 CST 距离 UTC 为 -6 小时。 任何帮助表示赞赏。

【问题讨论】:

我查看了这个并在我的本地笔记本电脑上运行您的代码并在 repl 中在线运行,我得到了您期望的输出。您是否尝试过在其他地方运行您的代码。可能是运行代码的机器的本地问题。 我正在尝试将 DateTime 转换为时区。就像时区感知的天真日期对象一样。但我失败了。我也在不同的机器上尝试过,使用不同的 venv,但我得到了相同的结果。 注:Stop using utcnow and utcfromtimestamp. 【参考方案1】:

问题

time_from_utc = datetime.datetime.utcfromtimestamp(int(1607020200))

给你一个简单的 datetime 对象 - 默认情况下 Python 将其视为本地时间。那么,在

time_from = time_from_utc.astimezone(e)

由于 time_from_utc 被视为 本地 时间,因此出现问题。 相反,请在调用 fromtimestamp 时明确设置 UTC:

from datetime import datetime, timezone
import pytz

fmt = '%Y-%m-%d %H:%M:%S %Z%z'
e = pytz.timezone('US/Central')

time_from_utc = datetime.fromtimestamp(1607020200, tz=timezone.utc)
time_from = time_from_utc.astimezone(e)
time_from.strftime(fmt)
time_to_utc = datetime.fromtimestamp(1609785000, tz=timezone.utc)
time_to = time_to_utc.astimezone(tz=pytz.timezone('US/Central'))
这会给你
2020-12-03 18:30:00+00:00
2020-12-03 12:30:00-06:00
2021-01-04 18:30:00+00:00
2021-01-04 12:30:00-06:00

最后说明:在 Python 3.9 中,您拥有 zoneinfo,因此您不需要第三方库来处理时区。 Example usage.

【讨论】:

以上是关于将时间从 UTC 转换为 CST的主要内容,如果未能解决你的问题,请参考以下文章

时区缩写 UTC, CST, GMT, CEST 以及转换

Debezium 时间戳问题,无法转换为本地时区

UTC到CST时间转换使用pytz python包

vsphere exsi6.5 由UTC修改时区为CST

centos7常见的操作01 UTC CST

Linux UTC,CST时间及修改时间