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

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

56 ответов

Решение

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

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

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

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

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

Вот список strftime.

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

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

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

Делать

from time import time

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

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

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

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

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

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

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

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

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

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

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

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 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'

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

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

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

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

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

Использование 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

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

С использованием 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

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

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

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

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

таблица кодов формата strftime

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

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

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

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

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

По умолчанию, 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

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

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

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)

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

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

#list timezones
pytz.all_timezones
import datetime

now = datetime.datetime.now()
print(now)

или используйте

import datetime

now = datetime.datetime.now()
print(now.strftime("%Y-%b-%d, %A %I:%M:%S$p")

Вы можете использовать эту функцию, чтобы получить время (к сожалению, оно не говорит 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]

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

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

from datetime import datetime

import pytz


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


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

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

import datetime

todays_date = datetime.date.today()
print(todays_date)
>>> 2019-10-12

# adding strftime will remove the seconds
current_time = datetime.datetime.now().strftime('%H:%M')
print(current_time)
>>> 23:38
Другие вопросы по тегам