Добавление timedelta к Skyfield Time

документация Skyfield Almanach

использует этот код для определения моментов времени, между которыми вычисляется восход и закат:

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

Что, если бы я просто хотел использовать одну (начальную) дату и установить следующую дату ровно через день? Я не могу просто добавить единицу к аргументу day, поскольку в конце месяца это будет неверно.

Используя Python datetime, я мог бы сделать это, используя

from datetime import datetime, timedelta

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

но я не могу найти ничего похожего на timedelta в документации API Skyfield.


person Uli Köhler    schedule 09.01.2019    source источник


Ответы (2)


Что, если бы я просто хотел использовать одну (начальную) дату и установить следующую дату ровно через день? Я не могу просто добавить один аргумент к аргументу дня, так как это будет неправильно в конце месяца.

К счастью, вы можете просто добавить еще один день! Как говорится в документации:

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'
person Brandon Rhodes    schedule 19.01.2019

Вы можете использовать timedelta datetime и преобразовывать обратно между datetime и Time объектами skyfield следующим образом:

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.

person Uli Köhler    schedule 09.01.2019