Преобразовать время 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
Другие вопросы по тегам