努力在 Python 中将时区 GMT 转换为 CST

Posted

技术标签:

【中文标题】努力在 Python 中将时区 GMT 转换为 CST【英文标题】:Struggling to convert timezones GMT to CST in Python 【发布时间】:2019-05-21 07:47:48 【问题描述】:

我已经为此花费了几个小时,但我的大脑似乎无法弄清楚,而且我发现的很多信息似乎都适用于 Python 2?

import datetime as dt
from datetime import datetime
from pytz import timezone
import pytz
time_stamp = 'Mon, 17 Dec 2018 18:05:01 GMT'

central = timezone('US/Central')
published_time = datetime.strptime(time_stamp, '%a, %d %b %Y %H:%M:%S %Z')
published_cst = published_time.astimezone(central)
actual_time_published = published_cst.strftime('%a, %b %d %Y at %I:%M:%S %p %Z')




print(time_stamp)
print(published_time)
print(published_cst)
print(actual_time_published)

预计 acutal_time_published 为 CST,因为 published_cst 有 GMT-6 小时(第三个结果),但这里是每个打印命令的实际结果。

Mon, 17 Dec 2018 18:05:01 GMT
2018-12-17 18:05:01
2018-12-17 18:05:01-06:00
Mon, Dec 17 2018 at 06:05:01 PM CST

拔掉我的头发!

编辑:是的,我有“entry.published”,我打算在这个问题上放置“time_stamp”。感谢您的编辑!

【问题讨论】:

我无法重现这一点——您给定的代码不可运行,因此请仔细检查。它将Mon, Dec 17 2018 at 12:05:01 PM CST 作为我的最后一行。 谢谢,是的,我有“entry.published”,我打算在这个问题上放置“time_stamp”。道歉。 【参考方案1】:

我想通了!即使原始时间戳返回时区 (GMT),它也没有分配给它的 tzinfo 值(时区值)。它仍然是一个“天真的”日期时间,即使字符串包含 strptime 识别的时区。所以,我只是将 UTC 的 tzinfo 值分配给原始时间,它似乎修复了它。

time_stamp = 'Mon, 17 Dec 2018 18:05:01 GMT'
utc = timezone('UTC')
central = timezone('US/Central')
published_time = datetime.strptime(time_stamp, '%a, %d %b %Y %H:%M:%S %Z')
published_gmt = published_time.replace(tzinfo=utc)
published_cst = published_gmt.astimezone(central)
actual_time_published = published_cst.strftime('%a, %b %d %Y at %I:%M:%S %p %Z')

所以...

print(time_stamp)
print(published_time)
print(published_cst)
print(actual_time_published)

产生这个输出:

Mon, 17 Dec 2018 18:05:01 GMT
2018-12-17 18:05:01
2018-12-17 18:05:01+00:00
2018-12-17 12:05:01-06:00
Mon, Dec 17 2018 at 12:05:01 PM CST

【讨论】:

啊哈,我试图在 UTC 的机器上重现这个。

以上是关于努力在 Python 中将时区 GMT 转换为 CST的主要内容,如果未能解决你的问题,请参考以下文章

需要在 oracle 中将任何时区转换为 GMT 时区

如何在 android 中将日期从 GMT 时区解析为 IST 时区和反之亦然

如何在 Python 中将日期时间转换为 GMT +7?

将本地时间转换为用户首选时区,将用户首选时区转换为 GMT

BigQuery转换为不同的时区

如何在 Python 中将美国/东部时区转换为美国/中部