Разобрать строку даты в формате UTC UNIX - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть метка времени в строковом формате

timestamp_str = '18:02:19 14:14:11 465872'
format_str = '%y:%m:%d %H:%M:%S %f'

и для ее преобразования в UTC в UNIX Я написал следующий код

def str2utc(timestr,formatstr):
    timeobj = datetime.datetime.strptime(timestr, formatstr)
    time_utc = time.mktime(timeobj.timetuple())
    return time_utc

timestamp_utc_unix = str2utc(timestamp_str,format_str)

Тем не менее, как я уже знаю, этоне работает, если мое системное время отличается от utc.Я читал другие сообщения, такие как

Python strptime () и часовые пояса?

, но просто не могу понять, как это исправить.Как мне изменить код, чтобы не важно, какое у меня системное время, он всегда выводит utc в unix?

1 Ответ

0 голосов
/ 28 ноября 2018

Документы Python :

Примечание

Нет способа получить метку времени POSIX непосредственно из простого экземпляра datetime, представляющего время UTC.Если ваше приложение использует это соглашение и системный часовой пояс не установлен на UTC, вы можете получить временную метку POSIX, указав tzinfo = timezone.utc:

timestamp = dt.replace(tzinfo=timezone.utc).timestamp()

или рассчитав временную меткунапрямую:

timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)

Таким образом, ваша функция будет выглядеть следующим образом:

def str2utc(timestr,formatstr):
    timeobj = datetime.datetime.strptime(timestr, formatstr)
    time_utc = timeobj.replace(tzinfo=datetime.timezon.utc).timestamp()
    return time_utc

Я получаю значение 1519049651.465872, которое соответствует тому, что яполучить от unixtimestamp.com

...