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

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

Ответы

Ответ 1

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

>>> 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. из всего вышеперечисленного.

Ответ 2

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

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'

Ответ 3

from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')

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

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

Ответ 4

Как и Harley answer, но используйте функцию str() для быстрого n-грязного, немного более удобного для чтения формата:

>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'

Ответ 5

Как получить текущее время в 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 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 не меняются для летнего времени, их пользователи могут переключаться на другие временные зоны, например, "Летнее время Великобритании" в течение лета).

осведомленность о часовом поясе datetime

Однако ни один из объектов datetime, которые мы создали до сих пор, может быть легко преобразован в различные временные интервалы. Мы можем решить эту проблему с помощью модуля 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 Epoch, которое я продемонстрировал первым.

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

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

Ответ 6

Do

from time import time

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

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

Ответ 7

>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

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

Эта страница имеет более подробную информацию.

Ответ 8

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

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

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

Ответ 9

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

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)

Ответ 10

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

>>> import time
>>> time.strftime("%Y%m%d")
'20130924'

Ответ 11

почему бы просто не держать вещи просто.

>>> from datetime import datetime
>>> datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2016-07-27 15:56:59'
>>>

Ответ 12

Просто и легко:

Используя модуль datetime,

import datetime
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

Выход:

2017-10-17 23:48:55

ИЛИ ЖЕ

Используя time,

import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))

Выход:

2017-10-17 18:22:26

Ответ 13

.isoformat() есть в документации, но еще не здесь (это очень похоже на ответ @Ray Vega):

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'

Ответ 14

Почему бы не спросить U.S. Морская обсерватория, официальный хронометрист ВМС США?

import requests
from lxml import html

page = requests.get('http://tycho.usno.navy.mil/cgi-bin/timer.pl')
tree = html.fromstring(page.content)
print(tree.xpath('//html//body//h3//pre/text()')[1])

Если вы живете в области D.C. (как и я), латентность может быть не слишком плоха...

Ответ 15

Используя панд, чтобы узнать текущее время, можно решить проблему как можно скорее:

import pandas as pd
print(pd.datetime.now())
print(pd.datetime.now().date())
print(pd.datetime.now().year)
print(pd.datetime.now().month)
print(pd.datetime.now().day)
print(pd.datetime.now().hour)
print(pd.datetime.now().minute)
print(pd.datetime.now().second)
print(pd.datetime.now().microsecond)

Выход:

2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693

Ответ 16

Вот что я закончил:

>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11

Кроме того, эта таблица является необходимой ссылкой для выбора соответствующих кодов формата для получения даты, отформатированной так, как вы этого хотите (из документации Python "datetime" здесь).

strftime format code table

Ответ 17

если вы уже используете numpy, то можете напрямую использовать функцию numpy.datetime64().

import numpy as np
str(np.datetime64('now'))

только на дату:

str(np.datetime64('today'))

или, если вы уже используете pandas, вы можете использовать функцию pandas.to_datetime()

import pandas as pd
str(pd.to_datetime('now'))

или же,

str(pd.to_datetime('today'))

Ответ 18

Вы можете использовать модуль time:

import time
print time.strftime("%d/%m/%Y")

>>> 06/02/2015

Использование капитала Y дает полный год, а использование y даст 06/02/15.

Вы также можете использовать следующий код, чтобы увеличить время:

time.strftime("%a, %d %b %Y %H:%M:%S")
>>> 'Fri, 06 Feb 2015 17:45:09'

Ответ 19

import datetime
date_time = datetime.datetime.now()

date = date_time.date()  # Gives the date
time = date_time.time()  # Gives the time

print date.year, date.month, date.day
print time.hour, time.minute, time.second, time.microsecond

Сделайте dir(date) или любые переменные, включая пакет. Вы можете получить все атрибуты и методы, связанные с переменной.

Ответ 20

datetime.now() возвращает текущее время как наивный объект datetime, который представляет время в локальном часовом поясе. Это значение может быть неоднозначным, например, во время перехода DST ( "отступить" ). Чтобы избежать двусмысленности, следует использовать часовой пояс UTC:

from datetime import datetime

utc_time = datetime.utcnow()
print(utc_time) # -> 2014-12-22 22:48:59.916417

Или объект с учетом часового пояса, к которому привязана соответствующая информация о часовом поясе (Python 3.2 +):

from datetime import datetime, timezone

now = datetime.now(timezone.utc).astimezone()
print(now) # -> 2014-12-23 01:49:25.837541+03:00

Ответ 21

По умолчанию функция now() возвращает выходные данные в YYYY-MM-DD HH:MM:SS:MS. Используйте приведенный ниже пример скрипта, чтобы получить текущую дату и время в скрипте Python и распечатать результаты на экране. Создайте файл getDateTime1.py со следующим содержанием.

import datetime

currentDT = datetime.datetime.now()
print (str(currentDT))

Вывод выглядит так:

2018-03-01 17:03:46.759624

Ответ 22

>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'

Ответ 23

Попробуйте модуль стрелок с http://crsmithdev.com/arrow/:

import arrow
arrow.now()

Или версия UTC:

arrow.utcnow()

Чтобы изменить его вывод, добавьте .format():

arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')

Для определенного часового пояса:

arrow.now('US/Pacific')

Час назад:

arrow.utcnow().replace(hours=-1)

Или если вы хотите суть.

arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'

Ответ 24

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

Например, ответ на оригинальный вопрос:

>>> import pendulum
>>> print(pendulum.now())
2018-08-14T05:29:28.315802+10:00
>>> print(pendulum.utcnow())
2018-08-13T19:29:35.051023+00:00

Существует множество стандартов, которые необходимо учитывать, включая множественные RFC и ISO, о которых нужно беспокоиться. Когда-нибудь перепутать их; не беспокойтесь, взгляните немного на dir(pendulum.constants) Там есть немного больше, чем в форматах RFC и ISO.

Когда мы говорим локальный, то что мы имеем в виду? Ну, я имею в виду:

>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>

Предположительно, большинство из вас значат где-то еще.

И на это идет. Короче говоря: маятник пытается сделать для даты и времени то, что запросы сделали для HTTP. Это стоит учитывать, в частности, из-за простоты использования и обширной документации.

Ответ 25

Я хочу получить время с миллисекундами. Простой способ получить их:

import time, datetime

print(datetime.datetime.now().time())                         # 11:20:08.272239

# Or in a more complicated way
print(datetime.datetime.now().time().isoformat())             # 11:20:08.272239
print(datetime.datetime.now().time().strftime('%H:%M:%S.%f')) # 11:20:08.272239

# But do not use this:
print(time.strftime("%H:%M:%S.%f", time.localtime()), str)    # 11:20:08.%f

Но я хочу только миллисекунды, верно? Самый короткий способ получить их:

import time

time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751

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

def get_time_str(decimal_points=3):
    return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)

Ответ 26

Если вам просто нужна текущая временная метка в мс (например, для измерения времени выполнения), вы также можете использовать модуль timeit:

import timeit
start_time = timeit.default_timer()
do_stuff_you_want_to_measure()
end_time = timeit.default_timer()
print("Elapsed time: {}".format(end_time - start_time))

Ответ 27

Потому что никто еще не упомянул об этом, и это то, с чем я столкнулся недавно... метод pyutz timezone fromutc() в сочетании с datetime utcnow() - лучший способ найти полезное текущее время (и дату) в любом часовом поясе.

from datetime import datetime

import pytz


JST = pytz.timezone("Asia/Tokyo")


local_time = JST.fromutc(datetime.utcnow())

Если вам нужно только время, вы можете получить его с помощью local_time.time().

Ответ 28

Вот то, что я использую, чтобы получить время без необходимости форматировать. Некоторым людям не нравится метод split, но он полезен здесь:

from time import ctime
print ctime().split()[3]

Он будет печататься в формате ЧЧ: ММ: СС.

Ответ 29

import datetime
date_time = str(datetime.datetime.now()).split()
date,time = date_time

дата будет печатать дату, а время будет печатать время.

Ответ 30

Вы можете использовать эту функцию, чтобы получить время (к сожалению, оно не говорит AM или PM):

def gettime():
    from datetime import datetime
    return ((str(datetime.now())).split(' ')[1]).split('.')[0]

Чтобы объединить часы, минуты, секунды и миллисекунды позже, вы можете использовать следующие функции:

Час:

def gethour():
    from datetime import datetime
    return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[0]

минута:

def getminute():
    from datetime import datetime
    return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[1]

Второе:

def getsecond():
    from datetime import datetime
    return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[2]

миллисекунды:

def getmillisecond():
    from datetime import datetime
    return (str(datetime.now())).split('.')[1]