如何在Python中将J2000时间转换为UTC?

4

我有一段时间,是以J2000格式表示的,即从2000年1月1日中午开始的秒数,我想将其转换为UTC时间,并以[年-月-日 时:分:秒.毫秒]的格式存储在数组中。是否有AstroPy或类似工具可用于进行此转换?

输入: J2000格式的时间: 559889620.293 秒

期望输出: UTC时间: 2017-09-28 16:53:40.293


2
如果你真的是指J2000,它被定义为2000年1月1日12:00地球时间。这相当于11:58:56.171 UT1。如果有关紧要,您可以查阅UT1和UTC之间的差异,但最多不会超过±0.9秒。您还需要考虑在计算秒数时是否包括闰秒。 - Gerard Ashton
3个回答

7
如果你想使用 astropy,你可以使用 astropy.time 中的 TimeTimeDelta
>>> from astropy.time import TimeDelta, Time
>>> from astropy import units as u
>>> (Time(2000, format='jyear') + TimeDelta(559889620.293*u.s)).iso
'2017-09-28 16:53:35.293'

Time(2000, format='jyear') 是一个很好的选择,如果你不想记住儒略日的基准日期(2000年1月1日中午)。


2
你实际上不需要 TimeDelta,以下代码可以工作,因为你可以将时间数量对象添加到时间中:(Time('J2000.0') + 559889620.293*u.s).iso - Tom Aldcroft
为什么这个输出比预期的早了5秒钟? - wim
@wim 看起来Astropy忽略了J2000和2017-09-28之间的5个闰秒。这是一个机器可读的闰秒表,https://www.ietf.org/timezones/data/leap-seconds.list,也可以在https://raw.githubusercontent.com/eggert/tz/main/leap-seconds.list找到(请注意,Paul Eggert是IANA TZ协调员)。这是我编写的一些Python代码,用于解析该列表:https://gist.github.com/PM2Ring/9dc0fa6a39dafb88b9e30f514b0dfead - PM 2Ring

5
偏移量是恒定的,因此您只需添加它:
>>> OFFSET = datetime(2000,1,1,12) - datetime(1970,1,1)
>>> datetime.utcfromtimestamp(559889620.293) + OFFSET
datetime.datetime(2017, 9, 28, 16, 53, 40, 293000)

请注意,datetime模块(以及Unix时间)会忽略闰秒。关于闰秒和时间刻度的大量信息可在Lick天文台网站上找到:https://www.ucolick.org/~sla/leapsecs/ - PM 2Ring

5
你可以简单地将一个 timedelta 增加到一个基本的 datetime 上。
import datetime
datetime.datetime(2000, 1, 1, 12, 0) + datetime.timedelta(seconds=559889620.293)

返回值:

datetime.datetime(2017, 9, 28, 16, 53, 40, 293000)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接