Возвращает ли time.time() в Python локальную или UTC метку времени?
Вопрос:
Существует ли разница между временем, возвращаемым функцией <code>time.time()</code>
в модуле time
на Python, и временем в UTC? Непонятно, возвращает ли данная функция системное время или время в формате UTC. Кто может прояснить этот вопрос? Спасибо!
5 ответ(ов)
Это для текстового представления временной метки, которое можно использовать в ваших текстовых файлах. (Название вопроса менялось в прошлом, поэтому вступление к этому ответу было изменено, чтобы прояснить, как это можно интерпретировать как время. [обновлено 2016-01-14])
Вы можете получить временную метку в виде строки, используя методы .now()
или .utcnow()
из модуля datetime
:
>>> import datetime
>>> print(datetime.datetime.utcnow())
2012-12-15 10:14:51.898000
Метод now
отличается от utcnow
, как и ожидалось — в остальном они работают одинаково:
>>> print(datetime.datetime.now())
2012-12-15 11:15:09.205000
Вы можете явно преобразовать временную метку в строку:
>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'
Либо вы можете задать формат временной метки так, как вам нравится:
>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'
Если вам нужен ISO-формат, используйте метод .isoformat()
объекта:
>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'
Вы можете использовать эти значения в переменных для вычислений и печати без преобразований.
>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print(ts)
2015-04-21 12:02:19.209915
>>> print(tf)
2015-04-21 12:02:30.449895
>>> print(te)
0:00:11.239980
В соответствии с ответом от #squiguy, чтобы получить истинный временной штамп, нужно привести его к целому типу из типа float.
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
По сути, это и есть суть.
Чтобы получить локальную метку времени с использованием библиотеки datetime
в Python 3.x, вы можете воспользоваться следующим кодом:
#wanted format: year-month-day hour:minute:seconds
from datetime import datetime
# Получаем текущее время
dt = datetime.now()
# Форматируем его в строку
timeStamp = dt.strftime('%Y-%m-%d %H:%M:%S')
# Выводим на экран
print(timeStamp)
В этом коде мы сначала импортируем класс datetime
из модуля datetime
. Затем с помощью метода now()
получаем текущее локальное время и форматируем его в заданный вид с помощью метода strftime()
. Результат выводится на экран.
В таком контексте нельзя говорить о "эпохе" в определенном часовом поясе. Эпоха четко определена как конкретный момент времени, и если вы изменяете часовой пояс, то и время само по себе изменяется. В частности, этот момент времени — 1 января 1970 года 00:00:00 UTC
. Таким образом, функция time.time()
возвращает количество секунд, прошедших с эпохи.
Я в итоге выбрал следующий вариант:
>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
Этот код использует модуль time
, чтобы получить текущее время в формате UNIX (количество секунд с 1 января 1970 года). Функция time.gmtime()
возвращает текущее время в виде структуры времени в формате UTC, а time.mktime()
преобразует эту структуру в количество секунд. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать!
Существует ли список временных зон Pytz?
Как узнать время выполнения программы на Python?
Как получить день недели по заданной дате?
Сохранить график в файл изображения вместо его отображения
Как отсортировать список/кортеж списков/кортежей по элементу на заданном индексе