python - 将原始时间转换为时区感知时间 (JST)

标签 python python-3.x datetime

我在数据库中存储了一堆时间对象,但它们都是幼稚的对象。他们存储的时间为“JST”或“亚洲/东京”tz。我尝试使用

naive_time.replace(tzinfo = pytz.timezone('Asia/Tokyo'))

但这将其设置为LMT+09:19:00,这是不正确的,它应该是LMT+09:00:00。任何正确执行的建议。

编辑: 数据库返回时间为 datatime.time对象 tzinfo=None喜欢 datetime.time(1, 0) 。我将其分配给 t 并尝试了

t.replace(tzinfo = pytz.timezone('Asia/Tokyo'))

这给了

datetime.time(1, 0, tzinfo=<DstTzInfo 'Asia/Tokyo' LMT+9:19:00 STD>)

但“亚洲/东京”或 JST 比 LMT 早 9 小时,而不是 9 小时 19 分钟。

最佳答案

您必须add a date这样您就可以对其进行本地化。否则,夏令时的确定是不明确的:各国可以选择是否以及何时使用夏令时,这会随着时间的推移导致很多变化。参见例如timeanddate.com对于JST。如果您想深入挖掘,请查看IANA database

示例:

import datetime
import pytz

naive_time = datetime.time(1, 0)

date = datetime.date(2019, 12, 24)
comb_time = datetime.datetime.combine(date, naive_time)

tz = pytz.timezone('Asia/Tokyo')
loc_time = tz.localize(comb_time)

# loc_time
# datetime.datetime(2019, 12, 24, 1, 0, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)

您可以在 Martijn Pieter 的 answer here 中找到更多信息。为什么您不应该使用 replace 方法为简单的 datetime 对象设置时区。

在这种情况下不能缺少的一般注意事项:如果可能的话,始终在内部使用 UTC - 仅确定供人类读取的输出的本地时间。

关于python - 将原始时间转换为时区感知时间 (JST),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59466936/

相关文章:

python - IO 任务中的 Python 多线程没有任何好处?

python - 计算某列在恢复为 0 之前为正值的时间量

java - 想知道如何将 JDateChooser 与 LocalNow 进行比较

c# 在转换之前检测字符串是否为长或 DateTime

python - 使用带有 Sitescout API 的 python 模块请求时的响应状态代码 400

python - 如何在随机森林分类器中找到最大深度?

python - 如何在 PyGame 中模拟逼真的速度?

python - 这是 pandas 0.17 中的 `Series.plot` 的错误吗?

Python:Factory Boy 生成对象创建时指定的长度列表

python - 尝试使用 aiohttp 构建代理