将本地时间转换为时区感知时间(JST)。

17 浏览
0 Comments

将本地时间转换为时区感知时间(JST)。

我在数据库中存储了一堆时间对象,但它们都是无时区的对象。它们所存储的时间是 \'JST\' 或 \'Asia/Tokyo\' 时区的。我尝试使用naive_time.replace(tzinfo = pytz.timezone(\'Asia/Tokyo\')),但这会将它设置为错误的 LMT+09:19:00,而应该是 LMT+09:00:00。有没有正确的建议?编辑:数据库以datetime.time(1, 0)的形式返回时间,并且tzinfo=None。我将其分配给t,并尝试了t.replace(tzinfo = pytz.timezone(\'Asia/Tokyo\')),结果得到了datetime.time(1, 0, tzinfo=),但是 \'Asia/Tokyo\' 或 JST 要比 LMT 提前 9 小时,而不是 9 小时 19 分钟。

0
0 Comments

问题的出现原因是在不考虑时区的情况下,无法确定夏令时的使用时间。不同国家可以选择是否以及何时使用夏令时,这导致时间发生了许多改变。解决方法是将日期和时间进行组合,然后将其转换为特定时区的时间。可以使用Python中的pytz库来实现。下面是一个示例代码:

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)
# 输出结果
# datetime.datetime(2019, 12, 24, 1, 0, tzinfo=)

通过将日期和时间进行组合,并使用pytz库中的`localize`方法将其转换为特定时区的时间,可以解决时区不明确的问题。

在这个上下文中,还需要注意的一点是:在内部处理时间时,尽可能使用协调世界时(UTC),只在输出给人类阅读的时候确定本地时间。更多相关信息可以参考Martijn Pieter在Stack Overflow上的回答。

0