Как узнать текущее время в 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" здесь).
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