it-roy-ru.com

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

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

2403
user46646

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

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

2537
Harley Holcombe

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

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

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

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

479
ParaMeterz

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

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

Как узнать текущее время в 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 с учетом часового пояса.

294
Aaron Hall

Делать

from time import time

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

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

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

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

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

90
Vijay Dev

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

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

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

55
Ethereal

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

Используя модуль 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
46
Ani Menon

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

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

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

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

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

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

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

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

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

30
C8H10N4O2

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

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
21
prudhvi Indana

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

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

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

strftime format code table

20
Kristen G.
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) или любые переменные, включая пакет. Вы можете получить все атрибуты и методы, связанные с переменной.

16
theBuzzyCoder

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
14
jfs

По умолчанию функция 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
12
Madhusudhan R

если вы уже используете 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'))
12
durjoy

Попробуйте модуль стрелки из 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)

Или если вы хотите Gist.

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

Вы можете использовать модуль 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'
12
EpsilonX

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

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)
11
y.selivonchyk
>>> import datetime, time
>>> time = strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:20:58:20S'
11
user2030113

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

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

>>> 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. Это стоит учитывать, особенно из-за простоты использования и обширной документации.

10
Ben

Если вам нужна текущая временная метка в мс (например, для измерения времени выполнения), вы также можете использовать модуль 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))
9
motagirl2

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

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

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

6
Amro elaswar

Потому что никто еще не упомянул об этом, и это то, с чем я столкнулся недавно ... метод 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().

6
kungphu

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

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

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

час:

def gethour():
        from datetime import datetime
        return 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 return (str(datetime.now())).split('.')[1]
6
Richie Bendall
import datetime
date_time = str(datetime.datetime.now()).split()
date,time = date_time

date напечатает дату и time напечатает время.

6
Abhijeet Deshani

Получить текущие атрибуты даты и времени:

import datetime

currentDT = datetime.datetime.now()

print ("Current Year is: %d" % currentDT.year)
print ("Current Month is: %d" % currentDT.month)
print ("Current Day is: %d" % currentDT.day)
print ("Current Hour is: %d" % currentDT.hour)
print ("Current Minute is: %d" % currentDT.minute)
print ("Current Second is: %d" % currentDT.second)
print ("Current Microsecond is: %d" % currentDT.microsecond)


#!/usr/bin/python
import time;

ticks = time.time()
print "Number of ticks since "12:00am, Jan 1, 1970":", ticks
3
Ram Prajapati
from time import ctime

// Day {Mon,Tue,..}
print ctime().split()[0]
// Month {Jan, Feb,..}
print ctime().split()[1]
// Date {1,2,..}
print ctime().split()[2]
// HH:MM:SS
print ctime().split()[3]
// Year {2018,..}
print ctime().split()[4]

Когда вы вызываете ctime(), он преобразует секунды в строку в формате 'Day Month Date HH:MM:SS Year' (например: 'Wed January 17 16:53:22 2018'), затем вызывается метод split(), который создаст список из вашей строки ['Wed','Jan','17','16:56:45','2018'] (по умолчанию разделителем является пробел).

Скобки используются для "выбора" требуемого аргумента в списке.

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

3
Bojan Petrovic

Это так просто. Пытаться:

    import datetime
    date_time = str(datetime.datetime.now())
    date = date_time.split()[0]
    time = date_time.split()[1]
2
Sachin Verma

Сначала импортируйте модуль datetime из datetime

from datetime import datetime

Затем выведите текущее время как "гггг-мм-дд чч: мм: сс"

print(str(datetime.now())

Чтобы получить только время в форме 'чч: мм: сс', где ss обозначает полное количество секунд плюс доля прошедших секунд, просто сделайте;

print(str(datetime.now()[11:])

Преобразование datetime.now () в строку дает ответ в формате, который выглядит как обычные ДАТЫ И ВРЕМЯ, к которым мы привыкли.

2
Samuel Nde

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

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

from Django.utils import timezone

now = timezone.now()
1
Anupam