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



我正在尝试将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]))

撇开我的评论不谈,如果这能回答你的问题,如果你有一个JD格式的UTC刻度的AstropyTime对象,你可以将它转换为Python时区感知的datetime对象,其pytz类似:

>>> 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])

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

相关内容

最新更新