将timedelta添加到skyfield时间

4

这里是与计算日出和日落相关的时间点定义代码,源自skyfield Almanach文档

t0 = ts.utc(2018, 9, 12, 4)
t1 = ts.utc(2018, 9, 13, 4)

如果我只想使用一个(开始)日期,并将下一个日期设置为正好在一天后,该怎么办?我不能仅将1添加到day参数,因为这在月底不正确。

使用Python的datetime,我可以使用以下代码实现:

from datetime import datetime, timedelta

datetime(2019, 1, 31, 12) + timedelta(days=1)
# datetime.datetime(2019, 2, 1, 12, 0)

但是我在skyfield API文档中找不到类似于timedelta的任何内容。

2个回答

5
如果我只想使用一个(开始)日期,并将下一个日期设置为恰好在一天后,该怎么办? 我不能仅仅将一天添加到日期参数中,因为这在月底不正确。
幸运的是,你可以只添加一天!正如文档所说:

https://rhodesmill.org/skyfield/time.html

您可以提供超出范围的值,然后由Skyfield计算出正确的结果。

>>> from skyfield.api import load
>>> ts = load.timescale()
[#################################] 100% deltat.data
>>> t = ts.utc(2018, 2, 28 + 1)
>>> t.utc_jpl()
'A.D. 2018-Mar-01 00:00:00.0000 UT'

对于任何可能看到这条评论的人,请注意处理小时、分钟和秒值时要小心。skyfield.timelib.Timescale.utc仅针对年、月、日参数处理闰秒。因此,如果您添加了一个超出范围的大值作为小时、分钟或秒数,它可能无法考虑到闰秒!// load.timescale().utc(1970, 1, 1, 0, 0, 1664381247.00).utc_strftime() 输出:'2022-09-28 16:07:00 UTC'。datetime.datetime.fromtimestamp(1664381247, datetime.timezone.utc).strftime("%Y-%m-%d %H:%M:%S") 输出:'2022-09-28 16:07:27'。 - KDecker

2
您可以使用 datetimetimedelta,并像这样在 datetime 和 Skyfield 的 Time 对象之间进行转换:
t0 = ts.utc(2019, 1, 31, 12)
t1 = ts.utc(t0.utc_datetime() + timedelta(days=1))

# Print
t1.utc_iso()
# '2019-02-01T12:00:00Z'

虽然不是很美观,但这让你能够使用Python的datetime的所有功能。


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