Python - time.time () и datetime.datetime.utcnow (). Timestamp (), возвращающие разные эпохи - PullRequest
1 голос
/ 10 апреля 2019

Это действительно два вопроса: во-первых, являются ли временные метки Epoch (Unix) одинаковыми на всех машинах (при условии, что их системные часы правильные), независимо от часовых поясов?

Я спрашиваю, потому что у меня развернут код на AWSЛямбда, которая генерирует метки времени эпохи с использованием модуля datetime.Когда мы извлекаем данные, я пытаюсь преобразовать в строку местного времени (также используя дату и время), и я получаю разницу в 2 часа по сравнению с тем, что ожидалось.Затем я начал тестировать следующий код:

import datetime
import time

print(time.time()) #1
print(datetime.datetime.utcnow().timestamp()) #2

print#1: 1554747526.775873
print#2: 1554783526.775873

Работая на моей локальной машине, они отличаются на два часа.Я развернул приведенный выше код в AWS Lambda, и они возвращают одинаковые значения.Как это отличается на моей машине?На снимке экрана ниже показан тот же код, который работает на AWS Lambda (слева) и на моей локальной машине.Мои системные часы верны.

time.time() vs datetime.utcnow().timestamp()

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Причина связана с часовым поясом вашего компьютера.Библиотека time использует часовой пояс, установленный на вашем компьютере, но в случае библиотеки datetime вы используете часовой пояс UTC.Чтобы получить метку времени в том же часовом поясе, используйте datetime.datetime.now().timestamp()

0 голосов
/ 10 апреля 2019

Проблема была в функции .timestamp ().

Если я запускаю «datetime.datetime.utcnow ()» на AWS, моя локальная машина (и различные тестовые машины, которые у меня также есть (экземпляры EC2 AWS)) возвращают одно и то же значение. Функция .timestamp () вызывает изменения.

Кроме того, time.time (), по-видимому, возвращает время только с начала эпохи. «... это зависит от платформы. Платформа может вернуть все, что захочет за время, при условии, что это делает так, чтобы localtime и gmtime работали должным образом. При этом, как правило, это будет GMT - или, скорее, либо UTC (Windows), либо UTC, за исключением високосных секунд (большинство других платформ). " См .: Возвращает ли Python time.time () метку времени в UTC?

...