python - 使用日期时间的 UTC 到 CST 转换不正确

标签 python datetime

我在从 python 模块 datetime 进行 UTC 到 CST 转换时遇到一个小问题。似乎起飞了 5 小时 51 分钟,而不是偶数 6 小时。请参阅代码。

import datetime as dt
from datetime import datetime
from pytz import timezone
import pytz

time_stamp = '18:42:14'
utc = timezone('UTC')
central = timezone('US/Central')
published_time = datetime.strptime(time_stamp, '%H:%M:%S')
published_gmt = published_time.replace(tzinfo=utc)
published_cst = published_gmt.astimezone(central)
actual_time_published = published_cst.strftime('%I:%M:%S %p')
print(time_stamp)
print(published_time)
print(published_cst)
print('Time: '+actual_time_published)

终端输出为:

18:42:14
1900-01-01 18:42:14
1900-01-01 12:51:14-05:51
Time: 12:51:14 PM

最佳答案

出于某种原因,Python 时区库认为美国/中部的 UTC 偏移量为 -05:51,直到 1901-12-13T20:45:52Z - 那时它切换到 -06:00。

时区规则实际上将其设置为 -05:50:36(即比 UTC 晚 5 小时 50 分钟 36 秒),直到 1883-11-18T18:00:00Z,此时它应该变为 -06 :00,所以图书馆肯定做错了事情。

但是,更重要的是,您试图仅在一次上执行时区转换,这是一件坏事。您应该始终对完整的日期/时间值执行时区转换,因为这是唯一有意义的事情。在大多数时区,一天中的同一时间在不同日期会有不同的偏移量。

无论如何,IANA 时区数据库只有在 1970 年之后才会真正准确,因此即使图书馆在 1901 年没有正确遵循该数据库,该年的数据也可能是错误的。我怀疑你的真实数据不是 1900 年左右,而是一个更近的日期——此时图书馆和数据库更有可能是正确的。因此,请确保使用正确的日期,问题就会(我怀疑)消失。

关于python - 使用日期时间的 UTC 到 CST 转换不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60327338/

相关文章:

python - 使用 docx 包删除表格单元格中的第一行

python - Pycharm - 在 WSL 上使用带有远程解释器的 pwntools

python lambda打印空间

javascript 日期对象 :Error while using addDays function

Java 8 日期和时间 : parse ISO 8601 string without colon in offset

java - LocalDate 获取上周星期六的日期

python - pysvn 给出错误 : Not a working copy

python - 如何从 SimpleNamespace 对象构建(稀疏)矩阵?

python - 如何强制 Pandas dataframe 列查询仅返回 str 而不解释它所看到的内容?

mysql - 序列化与模型对象不同的 DATE 记录