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

2742
user46646 6 Янв 2009 в 07:54

30 ответов

Лучший ответ

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

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

>>> print(datetime.datetime.now())
2009-01-06 15:08:24.789150

И просто время:

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

>>> print(datetime.datetime.now().time())
15:08:24.789150

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

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

>>> from datetime import datetime

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

2911
RTHarston 29 Окт 2019 в 17:00

По умолчанию функция 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
14
Peter Mortensen 6 Июн 2018 в 23:03

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

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

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

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

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

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

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

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

13
Ben 28 Дек 2019 в 22:47

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

from datetime import datetime

import pytz


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


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

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

8
kungphu 6 Июл 2018 в 08:24

Попробуйте модуль со стрелкой на странице 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'
13
Peter Mortensen 6 Июн 2018 в 22:52

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

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

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

6
Peter Mortensen 6 Июн 2018 в 22:51

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

Модуль time

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

import time

Unix Epoch Time

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

341
Aaron Hall 10 Июн 2016 в 20:42
import datetime
date_time = str(datetime.datetime.now()).split()
date,time = date_time

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

6
Abhijeet Deshani 24 Янв 2019 в 19:58

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

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
919
Honest Abe 20 Фев 2013 в 21:17

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

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'
36
Peter Mortensen 6 Июн 2018 в 22:44

Вы можете использовать модуль 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'
22
Georgy 31 Май 2019 в 09:09

Делать

from time import time

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

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

130
Kevin Guan 4 Дек 2015 в 06:46

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

См. этот ответ SO и Django doc для подробностей и обоснования timezone.now().

from django.utils import timezone

now = timezone.now()
6
Georgy 5 Июн 2019 в 11:50

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

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

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

69
Peter Mortensen 19 Сен 2019 в 14:09
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) или любые переменные, включая пакет. Вы можете получить все атрибуты и методы, связанные с переменной.

18
Peter Mortensen 6 Июн 2018 в 22:55

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

>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
447
Community 23 Май 2017 в 11:47

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

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)
12
Peter Mortensen 6 Июн 2018 в 22:54

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

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])

Если вы живете в округе Колумбия (как и я), задержка может быть не такой уж плохой ...

32
C8H10N4O2 19 Авг 2016 в 19:45

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
18
jfs 22 Дек 2014 в 22:52

Текущее время часового пояса

from datetime import datetime
import pytz

tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY time:", datetime_NY.strftime("%H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London time:", datetime_London.strftime("%H:%M:%S"))

tz_India = pytz.timezone('Asia/India')
datetime_India = datetime.now(tz_India)
print("India time:", datetime_India.strftime("%H:%M:%S"))
7
Georgy 18 Окт 2019 в 13:51

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

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

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

< EM> Час:

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

< EM> Минута:

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

< EM> Во-вторых :

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

< EM> миллисекунды :

def getmillisecond():
    from datetime import datetime
    return (str(datetime.now())).split('.')[1]
9
scrpy 13 Авг 2019 в 16:51

Если вы уже используете 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'))
24
durjoy 31 Май 2019 в 11:59

Это то, что я закончил с:

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

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

strftime format code table

27
Kristen G. 9 Янв 2015 в 18:24

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

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
30
Georgy 31 Май 2019 в 09:06
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')

Для этого примера выходные данные будут такими: '2013-09-18 11:16:32'

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

576
Bob Stein 23 Янв 2020 в 13:46

Если вам нужна текущая временная метка в мс (например, для измерения времени выполнения), вы также можете использовать модуль 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))
10
motagirl2 18 Июл 2018 в 07:11
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'
16
pokkie 14 Сен 2019 в 12:10

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

>>> import time
>>> time.strftime("%Y%m%d")
'20130924'
54
Peter Mortensen 19 Сен 2019 в 14:03

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

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)
47
Rob I 23 Ноя 2011 в 18:08