Конвертировать TLE раз (десятичные дни) в секундах после эпохи

Формат стандартного двухстрочного элемента ( TLE ) содержит времена как 2-значный год плюс десятичные дни, поэтому 16012.375 будет 12 января 2016 года в 09:00. Используя модули time python или datatime , как я могу преобразовать это в несколько секунд после эпохи? Я думаю, что я должен использовать структурированное время, но я не уверен, как это сделать. seconds_of – фиктивная функция – нужно заменить чем-то реальным.

EDIT: Будет полезно, если ответ длинный (verbose) – как один шаг в строке или так, поэтому я могу понять, что происходит.

EDIT 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 Solutions collect form web for “Конвертировать TLE раз (десятичные дни) в секундах после эпохи”

Легко получить объект 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 в «секунды с эпохи», зависит от часового пояса (local, utc и т. Д.). См. Раздел Преобразование даты datetime.date в метку времени UTC в Python, например, если ваш ввод находится в формате UTC, тогда просто получить «секунды с эпохи»:

 >>> utc_time = datetime(2016, 1, 12, 9, 0) >>> (utc_time - datetime(1970, 1, 1)).total_seconds() 1452589200.0 

Вы можете попробовать что-то вроде этого [EDIT в соответствии с комментариями].

 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 
  • Python: код манипуляции с датой
  • Python: случайное время в системе
  • Как установить nltk_contrib в Anaconda
  • Python: как получить время UTC, данное TIMEZONE
  • Анализатор времени на естественном языке
  • Время округления в Python
  • Расписание времени и даты запуска сценария
  • Время python utc минус 5 минут
  • Python - лучший язык программирования в мире.