Как узнать текущее время в Python - PullRequest
2388 голосов
/ 06 января 2009

Какой модуль / метод используется для получения текущего времени?

Ответы [ 33 ]

2525 голосов
/ 06 января 2009

Использование:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)

>>> print(datetime.datetime.now())
2018-07-29 09:17:13.812189

И только время:

>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)

>>> print(datetime.datetime.now().time())
09:17:51.914526

См. документацию для получения дополнительной информации.

Чтобы сохранить набор текста, вы можете импортировать объект datetime из модуля datetime:

>>> from datetime import datetime

Затем удалите ведущий datetime. из всего вышеперечисленного.

867 голосов
/ 06 января 2009

Вы можете использовать time.strftime():

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
475 голосов
/ 09 января 2013
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')

Для этого примера вывод будет выглядеть следующим образом: '2013-09-18 11:16:32'

Вот список директив strftime .

437 голосов
/ 04 мая 2011

Похоже на ответ Харли , но используйте функцию str() для быстрого, неприличного, чуть более удобочитаемого формата:

>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
289 голосов
/ 18 февраля 2015

Как узнать текущее время в Python?

Модуль time

Модуль time предоставляет функции, которые сообщают нам время в «секундах с начала эпохи», а также другие утилиты.

import time

Время эпохи Unix

Это формат, в котором вы должны получать временные метки для сохранения в базах данных. Это простое число с плавающей запятой, которое можно преобразовать в целое число. Это также хорошо для арифметики в секундах, так как представляет количество секунд с 1 января 1970 года 00:00:00, и это свет памяти относительно других представлений времени, на которые мы будем смотреть далее:

>>> time.time()
1424233311.771502

Эта временная метка не учитывает високосных секунд, поэтому она не линейна - високосные секунды игнорируются. Таким образом, хотя он не эквивалентен международному стандарту UTC, он близок, и, следовательно, довольно хорош для большинства случаев ведения учета.

Однако это не идеально для планирования человека. Если у вас есть будущее событие, которое вы хотите провести в определенный момент времени, вам нужно сохранить это время со строкой, которую можно проанализировать в объекте datetime или сериализованном объекте datetime (они будут описаны позже).

time.ctime

Вы также можете представлять текущее время так, как предпочитает ваша операционная система (что означает, что оно может меняться при изменении системных настроек, поэтому не полагайтесь, что оно будет стандартным для всех систем, как я видел) другие ожидают). Обычно это удобно для пользователя, но обычно не приводит к строкам, которые можно сортировать в хронологическом порядке:

>>> time.ctime()
'Tue Feb 17 23:21:56 2015'

Вы также можете перевести метки времени в удобочитаемую форму с помощью ctime:

>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'

Это преобразование также не подходит для ведения записей (за исключением текста, который будет анализироваться только людьми - и с улучшенным оптическим распознаванием символов и искусственным интеллектом, я думаю, число этих случаев уменьшится).

datetime модуль

Модуль datetime также весьма полезен здесь:

>>> import datetime

datetime.datetime.now

datetime.now - это метод класса, который возвращает текущее время. Он использует time.localtime без информации о часовом поясе (если не указан, в противном случае смотрите информацию о часовом поясе ниже). Он имеет представление (которое позволит вам воссоздать эквивалентный объект), отраженное в оболочке, но при печати (или приведении к str) оно имеет читаемый человеком формат (и почти ISO), и лексикографическая сортировка эквивалент хронологического вида:

>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461

datetime's utcnow

Вы можете получить объект datetime в глобальном стандарте времени UTC, выполнив следующее:

>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988

UTC - это стандарт времени, который почти эквивалентен часовому поясу GMT. (Хотя GMT и UTC не меняются на летнее время, их пользователи могут переключаться на другие часовые пояса, такие как британское летнее время, в течение лета.)

дата / время и часовой пояс

Однако ни один из созданных нами объектов даты и времени не может быть легко преобразован в различные часовые пояса. Мы можем решить эту проблему с помощью модуля pytz:

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

Эквивалентно, в Python 3 у нас есть класс timezone с присоединенным экземпляром utc timezone, который также делает объект часовой пояс осведомленным (но преобразование в другой часовой пояс без удобного модуля pytz оставлено в качестве упражнения читателю):

>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)

И мы видим, что можем легко преобразовать часовые пояса из исходного объекта utc.

>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00

Вы также можете сделать наивный объект datetime осведомленным с помощью метода pytz timezone localize или путем замены атрибута tzinfo (на replace, это делается вслепую), но это более поздние меры, чем лучшие практики :

>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)

Модуль pytz позволяет нам сообщать о часовом поясе объектов datetime и преобразовывать время в сотни часовых поясов, доступных в модуле pytz.

Можно было бы якобы сериализовать этот объект для времени UTC и сохранить , что в базе данных, но это потребовало бы гораздо больше памяти и было бы более подвержено ошибкам, чем простое сохранение времени эпохи Unix, которое я продемонстрировал первым ,

Другие способы просмотра времени гораздо более подвержены ошибкам, особенно при работе с данными, которые могут поступать из разных часовых поясов. Вы хотите, чтобы не было путаницы относительно того, для какого часового пояса была предназначена строка или сериализованный объект datetime.

Если вы отображаете время с Python для пользователя, ctime работает хорошо, не в таблице (обычно не очень хорошо сортируется), но, возможно, в часах. Однако я лично рекомендую при работе со временем в Python использовать Unix time или объект UTC datetime с поддержкой часовых поясов.

120 голосов
/ 06 января 2009

Do

from time import time

t = time()
  • t - число с плавающей запятой, подходящее для измерения временного интервала.

Существует некоторая разница для платформ Unix и Windows.

88 голосов
/ 06 января 2009
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

Вывод текущего GMT в указанном формате. Существует также метод localtime().

На этой странице есть больше деталей.

54 голосов
/ 31 октября 2013

Все хорошие предложения, но я считаю, что проще всего ctime() себя:

In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'

Это дает красиво отформатированное строковое представление текущего местного времени.

41 голосов
/ 27 декабря 2010

Если вам нужно текущее время как объект time:

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)
39 голосов
/ 24 сентября 2013

Самый быстрый способ -

>>> import time
>>> time.strftime("%Y%m%d")
'20130924'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...