Возвращает ли time.time()
в модуле времени Python системное время или время в UTC?
Функция time.time()
возвращает количество секунд, прошедших с эпохи, в секундах. Обратите внимание, что "эпоха" определяется как начало 1 января 1970 года по UTC. Таким образом, эпоха определяется в терминах UTC и устанавливает глобальный момент времени. Независимо от того, где вы находитесь, "в секундах от эпохи" (time.time()) возвращает одно и то же значение в один и тот же момент времени.
Вот пример вывода, который я прогнал на своем компьютере, преобразовав его также в строку.
Python 2.7.3 (default, Apr 24 2012, 00:00:54)
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>
Переменная ts
- это время в секундах. Затем я преобразовал ее в строку с помощью библиотеки datetime
, превратив ее в строку, читаемую человеком.
Это для текстовой формы временной метки, которая может использоваться в ваших текстовых файлах. (В прошлом название вопроса было другим, поэтому введение к этому ответу было изменено, чтобы уточнить, как это можно интерпретировать как время. [обновлено 2016-01-14])
Вы можете получить временную метку в виде строки, используя .now()
или .utcnow()
из datetime.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
По крайней мере, такова концепция.
Ответ может быть ни или обоих.
ни: время.возвращает время()
примерно количество секунд, прошедших с начала эпохи. Результат не'т зависеть от часового пояса, поэтому она не является ни мирового, ни местному времени. Здесь'ы определение POSIX для "в количество секунд с начала эпохи и".
оба: время.время()
не'т требуют, чтобы ваша система'ы часы должны быть синхронизированы так, что он отражает его значение (хотя это не имеет ничего общего с местного часового пояса). Разные компьютеры могут получить разные результаты в то же время. С другой стороны, если время на вашем компьютере это синхронизированное тогда легко получить мирового времени от метку времени (если не учитывать високосные секунды):
от импорта датавремя датавремя
utc_dt = датавремя.utcfromtimestamp(временная метка)
О том, как получить метки времени в формате UTC в различных версий Python, см. Как я могу получить дату преобразовать в секунды с начала эпохи по данным Мирового?
Нет такой вещи, как и"Эпоха" в определенный часовой пояс. Эпоха четко определено в конкретный момент времени, поэтому, если вы измените часовой пояс, само время изменилось. В частности, это время 1 января 1970 00:00:00 по Гринвичу. Так что времени.время()
возвращает количество секунд с начала эпохи.
timestamp-это всегда время в UTC, но когда вы называете `типа datetime.датавремя.fromtimestamp это возвращает вас время по вашему часовому поясу, соответствующему данному метку, поэтому результат зависит от вашей локали.
>>> import time, datetime
>>> time.time()
1564494136.0434234
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)
Существует хорошая библиотека "стрелка" с различным поведением. В этом случае он возвращает объект с часовой пояс по Гринвичу.
>>> import arrow
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>