Какой модуль / метод используется для получения текущего времени?
Какой модуль / метод используется для получения текущего времени?
Ответы:
Использование:
>>> 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.
из всего вышеперечисленного.
datetime.datetime.now()
в моей интерактивной консоли Python 2.7 (IronPython еще не обновился), я получаю то же поведение, что и в новом примере, использованном print()
в ответе. Я не повторил успешно то, что показывает исходный ответ (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)). (Не то, чтобы я действительно этого хотел, поведение print () предпочтительнее, но мне любопытно.)
datetime.now()
print(datetime.now())
Вы можете использовать time.strftime()
:
>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
time
модуль против datetime
модуля?
localtime()
вместо, gmtime()
чтобы получить ваше местное время.
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
Это формат, в котором вы должны получить временные метки для сохранения в базах данных. Это простое число с плавающей запятой, которое можно преобразовать в целое число. Это также хорошо для арифметики в секундах, так как представляет количество секунд с 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
без информации о часовом поясе (если не указан, в противном случае см. Часовой пояс ниже). Он имеет представление (которое позволит вам воссоздать эквивалентный объект), отраженное в оболочке, но при печати (или приведении к a 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
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
экземпляром utc , который также делает объект часовой пояс осведомленным (но преобразование в другой часовой пояс без удобного 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 (with 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
объекты TIMEZONE осведомленными и конвертировать раз в сотни часовых поясов , доступных в pytz
модуле.
Можно было бы якобы сериализовать этот объект для УСВ и хранить , что в базе данных, но это потребовало бы гораздо больше памяти и более склонны к ошибкам , чем просто хранение времени Unix Epoch, который я продемонстрировал первый.
Другие способы просмотра времени гораздо более подвержены ошибкам, особенно при работе с данными, которые могут поступать из разных часовых поясов. Вы хотите, чтобы не было путаницы относительно того, для какого часового пояса была предназначена строка или сериализованный объект datetime.
Если вы отображаете время с Python для пользователя, он ctime
работает хорошо, не в таблице (обычно не очень хорошо сортируется), но, возможно, в часах. Однако я лично рекомендую при работе со временем в Python использовать либо время Unix, либо datetime
объект UTC с учетом часового пояса .
Делать
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'
Это дает красиво отформатированное строковое представление текущего местного времени.
Если вам нужно текущее время как time
объект:
>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)
Почему бы не спросить Военно-морскую обсерваторию США , официального хронометриста ВМС США?
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])
Если вы живете в округе Колумбия (как и я), задержка может быть не слишком плохой ...
Используя панд, чтобы узнать текущее время, можно решить проблему:
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
Это то, что я закончил с:
>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11
Кроме того, эта таблица является необходимой ссылкой для выбора соответствующих кодов формата, чтобы получить дату, отформатированную так, как вы этого хотите (из документации Python «datetime» здесь ).
strftime(time_format)
возвращает текущее местное время в виде строки, соответствующей заданному time_format
. Примечание: time.strftime()
и datetime.strftime()
поддерживает различные наборы директив, например, %z
не поддерживается time.strftime()
в Python 2 .
time
функции модуля являются тонкими обертками вокруг соответствующих функций C. datetime
это более высокий уровень, и он обычно более переносим.
если вы уже используете 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'))
Вы можете использовать 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'
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
Do dir(date)
или любые переменные, включая пакет. Вы можете получить все атрибуты и методы, связанные с переменной.
import datetime
тогда это datetime.datetime.now()
\ n, если from datetime import datetime
это такdatetime.now()
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38: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
Этот вопрос не нуждается в новом ответе только ради этого ... блестящая новая игрушка / модуль, однако, является достаточным оправданием. Это будучи библиотекой маятника , которая, похоже, выполняет те действия, которые предпринимала стрелка, за исключением тех недостатков, которые присущи стрелке.
Например, ответ на оригинальный вопрос:
>>> 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. Это стоит учитывать, особенно из-за простоты использования и обширной документации.
Текущее время часового пояса
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
Попробуйте модуль стрелки с 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'
arrow.now('Time/Zone')
может произойти сбой в некоторых часовых поясах ( arrow
использует dateutil
, в котором нарушены utc -> локальные преобразования , которые используются внутри arrow.now()
. Примечание: pytz
такой проблемы нет . Также есть другие проблемы, связанные с
Я хочу получить время с миллисекундами. Простой способ получить их:
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)
Вы можете использовать эту функцию, чтобы получить время (к сожалению, оно не говорит 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]
Если вам нужна текущая временная метка в мс (например, для измерения времени выполнения), вы также можете использовать модуль 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 timezone from) () в сочетании с utcnow () для datetime - лучший способ найти полезное текущее время (и дату) в любом часовом поясе.
from datetime import datetime
import pytz
JST = pytz.timezone("Asia/Tokyo")
local_time = JST.fromutc(datetime.utcnow())
Если все, что вам нужно, это время, вы можете получить это с local_time.time()
.
Вот то, что я использую, чтобы получить время без необходимости форматировать. Некоторым людям не нравится метод split, но он полезен здесь:
from time import ctime
print ctime().split()[3]
Он будет печататься в формате ЧЧ: ММ: СС.
Этот вопрос относится к Python, но поскольку Django является одной из наиболее широко используемых сред Python, важно отметить, что если вы используете Django, вы всегда можете использовать timezone.now()
вместоdatetime.datetime.now()
. Первый - это часовой пояс, а второй - нет.
Посмотрите этот ТАК ответ и документ Django для деталей и обоснования timezone.now()
.
from django.utils import timezone
now = timezone.now()
Вы можете сделать это с помощью ctime ():
from time import time, ctime
t = time()
ctime(t)
вывод:
Sat Sep 14 21:27:08 2019
Эти выходные данные различаются, поскольку возвращаемая временная метка ctime()
зависит от вашего географического положения.