使用 pytz 将 UTC 转换为其他地方的本地时间

Posted

技术标签:

【中文标题】使用 pytz 将 UTC 转换为其他地方的本地时间【英文标题】:Converting UTC to local time somewhere else by using pytz 【发布时间】:2021-08-02 05:04:57 【问题描述】:

我正在尝试将 sun 和 f 变量都转换为日本的当地时间。 我的代码仍然以 UTC 格式给出输出。

if night_time:
    sun = [float(str(time_now.jd)), float(str(next_sun_rise))]
else:
    sun = [float(str(next_sun_set)), float(str(next_sun_rise))]

if AlwaysBelowTheHorizon:
    pass
elif Circumpolar:
    sun = Time(sun, format='jd')
    if night_time:
        post_message_to_slack("Bingo! We can observe it now until sunrise at ".format(sun.iso[1]))
    else:
        post_message_to_slack("Sun will set at ".format(sun.iso[0]))
else:
    if grb_above:
        grb = [float(str(time_now.jd)), float(str(grb_set))]
    else:
        grb = [float(str(grb_rise)), float(str(grb_set))]

    intervals = [sun, grb]
    N = len(intervals)
    f = findIntersection(intervals, N)
    f = f.datetime(timezone('UTC'))
    f = f.astimezone(timezone('Asia/Tokyo'))
    post_message_to_slack("We can observe it from  to ".format(f[0], f[1]))

【问题讨论】:

嗨,欢迎来到 *** 并祝贺您的​​第一个问题!请注意,在发布 Python 代码时,确保其格式正确非常重要,因为 Python 中的正确缩进很重要。您应该确保在所有缩进完整的情况下逐字复制/粘贴它。我已尝试将您的代码示例重新格式化为我认为的预期,但您可能需要仔细检查。 另一方面,您的代码缺少重要的上下文,例如您如何初始化变量time_nowgrb_rise 等,以及findIntersection 函数的定义。由于您的问题是关于将 astropy Time 对象转换为特定时区的时间,因此将来尝试将问题 just 集中在该方面(执行此任务的最小步骤)而不是不相关的东西,比如向 slack 发布消息。见How to create a Minimal, Reproducible example 【参考方案1】:

除了我的 cmets,如果这回答了你的问题,如果你有一个现有的带有 UTC 刻度的 JD 格式的 Astropy Time 对象,你可以将其转换为 Python 时区感知 datetime 对象,如:

>>> from astropy.time import Time
>>> from pytz import timezone
>>> t = Time(Time.now(), format='jd')
>>> t
<Time object: scale='utc' format='jd' value=2459346.8222489627>
>>> tz = timezone('Asia/Tokyo')
>>> dt = t.to_datetime(timezone=tz)
>>> dt
datetime.datetime(2021, 5, 12, 16, 44, 2, 310364, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)

float(str(time.jd)) 的任何东西都不是必需的。例如,如果您有两个现有的Time 对象sun_risesun_set,并且您想将它们组合成一个Time 数组,您已经可以这样做了:

>>> sun = Time([sun_rise, sun_set])

不需要任何手动(且容易出错)的类型转换洗牌。

【讨论】:

以上是关于使用 pytz 将 UTC 转换为其他地方的本地时间的主要内容,如果未能解决你的问题,请参考以下文章

Python pytz:将本地时间转换为 UTC。本地化似乎没有转换

将本地时间转换为 UTC 时间(日期时间对象)

Pytz 在没有 DST 的情况下将时间转换为 UTC

Flask + Jinja:将 UTC 转换为本地时区

Django将本地时间转换为UTC时间

Python将字符串转换为本地日期时间到UTC日期时间