【问题标题】:Converting UTC to local time somewhere else by using pytz使用 pytz 将 UTC 转换为其他地方的本地时间
【发布时间】: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]))

【问题讨论】:

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

标签: utc pytz astropy


【解决方案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])

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

【讨论】:

    猜你喜欢
    • 2014-10-05
    • 2017-03-10
    • 2012-11-01
    • 2013-08-26
    • 1970-01-01
    • 2018-07-27
    • 2018-04-02
    • 2023-03-31
    相关资源
    最近更新 更多