Добавление timedelta в Timefield

Альманах документация Skyfield

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

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 в документации по skyfield API.

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'

Ты можешь использовать datetime"s timedelta и преобразовать обратно между datetime и скайфилд 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,

Другие вопросы по тегам