Преобразовать время TLE (десятичные дни) в секунды после эпохи
Стандартный формат двухстрочных элементов ( TLE) содержит времена в виде двухзначного года плюс десятичные дни, поэтому 16012.375
будет 12 января 2016 года в 09:00. Используя питона time
или же datatime
модули, как я могу преобразовать это в секундах после эпохи? Я думаю, что я должен использовать структурированное время, но я не уверен, как. seconds_of
это фиктивная функция - нужно заменить на что-то реальное.
РЕДАКТИРОВАТЬ: Это будет очень полезно, если ответ длинный (многословный) - например, один шаг в строке или около того, чтобы я мог понять, что происходит.
РЕДАКТИРОВАТЬ 2: После просмотра комментариев от @JFSebastian я посмотрел на ссылку для TLE и обнаружил, что нигде не говорится "UTC". Таким образом, я должен указать на начальную информацию и окончательную информацию UTC. Нет ссылки на местное время, часовой пояс или системное время.
например
tim = "16012.375"
year = 2000 + int(tim[0:2])
decimal_days = float(tim[2:])
print year, decimal_days
2016, 12.375
# seconds_of is a fictitious function - need to replace with something real
seconds_after_epoch = seconds_of(2016,1,1) + (3600. * 24.) * decimal_days
2 ответа
Легко получить datetime
данный объект year
а также decimal_days
:
>>> from datetime import datetime, timedelta
>>> year = 2016
>>> decimal_days = 12.375
>>> datetime(year, 1, 1) + timedelta(decimal_days - 1)
datetime.datetime(2016, 1, 12, 9, 0)
Как конвертировать datetime
Объект в "секундах с эпохи" зависит от часового пояса (локальный, utc и т. д.). См. Преобразование datetime.date в метку времени UTC в Python, например, если ваш ввод в UTC, тогда просто получить "секунды с начала эпохи":
>>> utc_time = datetime(2016, 1, 12, 9, 0)
>>> (utc_time - datetime(1970, 1, 1)).total_seconds()
1452589200.0
Вы можете попробовать что-то вроде этого [РЕДАКТИРОВАТЬ согласно комментариям].
import datetime
import time
# get year 2 digit and floating seconds days
y_d, nbs = "16012.375".split('.')
# parse to datetime (since midnight and add the seconds) %j Day of the year as a zero-padded decimal number.
d = datetime.datetime.strptime(y_d, "%y%j") + datetime.timedelta(seconds=float("." + nbs) * 24 * 60 * 60)
# 1.0 => 1 day
# from time tuple get epoch time.
time.mktime(d.timetuple())
#1481896800.0