Объект JulianDate
в Skyfield - это удобный способ быстро произвести и удерживать набор значений времени в Julian Days и передать их методу Skyfield at()
для вычисления астрономических положений в различных координатах. (Посмотреть example script)Как добавить объекты или смещения JulianDate в Skyfield
Однако, я не могу найти add
или offset
метод, так что я могу добавить смещение по времени или итератора смещений к JulianDate
объекта. Мне всегда кажется struggle с датами и временем.
Вот очень простой, абстрактный пример. Я генерирую jd60
, который смещен от произвольного jd0
на 60 дней. В качестве простой проверки я вычисляю положение земли в два раза и убеждаюсь, что она движется примерно на 60 градусов.
from skyfield.api import load, JulianDate
import numpy as np
data = load('de421.bsp')
earth = data['earth']
Начать с произвольным t_zero:
jd0 = JulianDate(utc=(2016, 1, 17.4329, 22.8, 4, 39.3)) # (y, m, d, h, m, s)
Теперь сделайте второй объект JulianDate компенсировано 60 дней
Это работает:
tim = list(jd0.tt_tuple())
tim[2] += 60 # add 60 days (~1/6 of a year)
jd60 = JulianDate(utc=tuple(tim))
Но то, что я хотел бы что-то типа:
jd60 = jd0.add(delta_utc=(0, 0, 60, 0, 0, 0)) # ficticious method
Теперь вычислите позиции и найдите приблизительный угол, чтобы увидеть, что он сработал.
p0 = earth.at(jd0).position.km
p60 = earth.at(jd60).position.km
dot = (p0*p60).sum()
cos_theta = dot/np.sqrt((p0**2).sum() * (p61**2).sum())
print (180./np.pi) * np.arccos(cos_theta)
print "should be roughly 60 degrees"
дает
60.6215331601
should be roughly 60 degrees
Отлично! Вопрос был написан еще в феврале до того, как существовал метод '.timescale()'. Хорошо поймал! – uhoh