Возвращает ли 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?
Как получить день недели по заданной дате?
Как изменить порядок столбцов в DataFrame?
'pip' не распознан как командa внутреннего или внешнего формата