Какой модуль / метод используется для получения текущего времени?
Как получить текущее время в Python
Ответы (51)
Использование:
>>> 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.
из всего вышеперечисленного.
Было бы неплохо, если бы этот ответ охватывал часовые пояса (например, UTC) и, возможно, начинался с time.time ().
@Toskan формат не был частью вопроса, поэтому он не должен быть частью ответа. Уже есть ссылка на дополнительную документацию по модулю, которая содержит такие вещи, как форматирование.
В какой версии Python был дан исходный ответ? Просто набрав datetime.datetime.now()
в моей интерактивной консоли Python 2.7 (IronPython еще не обновлен), я получаю то же поведение, что и более новый пример с использованием print()
в ответе. Я не смог успешно воспроизвести то, что показывает исходный ответ (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)). (Не то чтобы я действительно этого хотел, поведение print () предпочтительнее, но мне любопытно.)
@BobVicktor: Python 2.7, 3.7 и 3.8 дают мне одно и то же поведение, я не уверен, что вы видите.
@HarleyHolcombe Хм ... может, дело в IronPython? Когда я набираю datetime.now()
сам по себе, он распечатывает то же самое, что и ваш ответ print(datetime.now())
...
Рассмотрим import datetime as dt
, если вы хотите использовать другие модули datetime, например datetime.time
.
@GregLindahl Timezone Aware: datetime.datetime.now(tz=pytz.UTC).astimezone()
... Или что-то подобное, например, фактический часовой пояс, в котором расположена система. В качестве альтернативы, datetime.datetime.now(datetime.timezone.utc).astimezone()
или datetime.datetime.utcnow().astimezone()
в зависимости от версии Python и варианта использования.
Если вы используете Панды много (как я), вы можете использовать Timestamp
, который является эквивалентом <292023202320232023202320232087629204>, что является эквивалентом. Datetime
>:
import pandas as pd
pd.Timestamp.now()
И только время:
pd.Timestamp.now().strftime('%H:%M:%S')
Это должно работать
import time
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("The current time is", current_time)
Это работает... Интересно, почему кто-то отметил -1
Атрибуты now() можно использовать для получения текущего времени в python:
# importing datetime module for now()
import datetime
# using now() to get current time
current_time = datetime.datetime.now()
# Printing attributes of now().
print ("The attributes of now() are : ")
print ("Year : ", end = "")
print (current_time.year)
print ("Month : ", end = "")
print (current_time.month)
print ("Day : ", end = "")
print (current_time.day)
print ("Hour : ", end = "")
print (current_time.hour)
print ("Minute : ", end = "")
print (current_time.minute)
print ("Second : ", end = "")
print (current_time.second)
print ("Microsecond : ", end = "")
print (current_time.microsecond)
Получает текущее время и преобразует его в строку:
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Если вы используете его для django, дата и время иногда не будут работать на сервере, поэтому я рекомендую использовать часовой пояс
Но для использования часового пояса django вы должны установить код часового пояса своей страны в настройках.py
TIME_ZONE = 'Asia/Tashkent'
Тогда вы можете использовать его
from django.utils import timezone
timezone.now() // for date time
timezone.now().year // for yaer
timezone.now().month // for month
timezone.now().day // for day
timezone.now().date // for date
timezone.now().hour // for hour
timezone.now().weekday // for minute
или если вы хотите использовать на python
import time
time.strftime('%X') // '13:12:47'
time.strftime('%x') // '01/20/22'
time.strftime('%d') // '20' day
time.strftime('%m') // '01' month
time.strftime('%y') // '20' year
time.strftime('%H') // '01' hour
time.strftime('%M') // '01' minute
time.strftime('%m') // '01' second
Используйте этот метод для UTC DateTime, локальной даты и времени и конвертируйте am и pm
import pytz
from datetime import datetime
#UTC Time
print("UTC Date and time")
epoch: datetime =datetime.now().replace(tzinfo=pytz.utc)
print(epoch)
#local date and time
print("Local Date and time")
today = datetime.now()
local_time = today.strftime("%Y-%M-%d:%H:%M:%S")
print(local_time)
#convert time to AM PM format
print("Date and time AM and PM")
now = today.strftime("%Y-%M-%d:%I:%M %p")
print(now)
Понижение за использование устаревшего pytz, усугубляемое тем фактом, что также есть datetime.timezone.utc
.
попробуйте это:-
from datetime import datetime
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
Вот код, который показывает время только в соответствии с вашим вопросом:
from datetime import datetime
while True:
time= datetime.now()
b = time.strftime("%H:%M:%S")
print(b, end='\r')
Этот код будет отображать текущее время вашей системы без остановки.
import datetime
print('date='+datetime.datetime.now().__str__().split(' ')[0]+' '+'time='+datetime.datetime.now().__str__().split(' ')[1]
Поскольку Qt широко используется,
from PyQt5 import QDateTime
print(QDateTime.currentDateTime().__str__().split('(')[1].rstrip(')'))
По сравнению с другими ответами, ваш ответ длинный и сложный
Начиная с Python 3.9, модуль zoneinfo
можно использовать для получения часовых поясов вместо использования сторонней библиотеки.
Чтобы получить текущее время в определенном часовом поясе:
from datetime import datetime
from zoneinfo import ZoneInfo
datetime.now(tz=ZoneInfo("Europe/Amsterdam"))
Последняя версия Python, доступная для загрузки, - 3.8.5! python.org/downloads
Конечно, но в будущем, когда это будут читать другие, этого не будет. Фактически, сегодня был выпущен первый кандидат на выпуск: docs.python.org/3.9/whatsnew/3.9.html
Если вам нужно время для тайминговых вызовов функций, тогда вам нужно time.perf_counter ().
start_time = time.perf_counter()
expensive_function()
time_taken = time.perf_counter() - start_time
print(f'expensive_function() took {round(time_taken,2)}s')
time.perf_counter () → float
Возвращает значение (в долях секунды) счетчика производительности, т. Е. Часы с наивысшим доступным разрешением для измерения короткой продолжительности. Он включает время, прошедшее во время сна, и является общесистемным. Контрольная точка возвращаемого значения не определена, поэтому допустима только разница между результатами последовательных вызовов.
Новое в версии 3.3.
time.perf_counter_ns () → int
Подобно perf_counter (), но возвращает время в наносекундах.
Новое в версии 3.7.
мы можем сделать это с помощью модуля datetime
>>> from datetime import datetime
>>> now = datetime.now() #get a datetime object containing current date and time
>>> current_time = now.strftime("%H:%M:%S") #created a string representing current time
>>> print("Current Time =", current_time)
Current Time = 17:56:54
Кроме того, мы можем получить текущее время в масштабе времени, используя модуль pytZ.
>>> from pytz import timezone
>>> import pytz
>>> eastern = timezone('US/Eastern')
>>> eastern.zone
'US/Eastern'
>>> amsterdam = timezone('Europe/Amsterdam')
>>> datetime_eu = datetime.now(amsterdam)
>>> print("Europe time::", datetime_eu.strftime("%H:%M:%S"))
Europe time:: 14:45:31
Вы можете попробовать следующее
import datetime
now = datetime.datetime.now()
print(now)
или
import datetime
now = datetime.datetime.now()
print(now.strftime("%Y-%b-%d, %A %I:%M:%S"))
Модуль time
может импортировать всевозможные данные о времени, включая переход в режим сна и другие типы данных, включая - текущий тип времени
import time
time.strftime("%T", time.localtime())
Результат должен выглядеть так:
05:46:33
11:22:56
13:44:55
22:33:44
00:00:00
Метод 1: получение текущей даты и времени из системного datetime
Модуль datetime предоставляет классы для управления датами и временем.
Код
from datetime import datetime,date
print("Date: "+str(date.today().year)+"-"+str(date.today().month)+"-"+str(date.today().day))
print("Year: "+str(date.today().year))
print("Month: "+str(date.today().month))
print("Day: "+str(date.today().day)+"\n")
print("Time: "+str(datetime.today().hour)+":"+str(datetime.today().minute)+":"+str(datetime.today().second))
print("Hour: "+str(datetime.today().hour))
print("Minute: "+str(datetime.today().minute))
print("Second: "+str(datetime.today().second))
print("MilliSecond: "+str(datetime.today().microsecond))
Вывод будет похож на
Date: 2020-4-18
Year: 2020
Month: 4
Day: 18
Time: 19:30:5
Hour: 19
Minute: 30
Second: 5
MilliSecond: 836071
Метод 2: получение текущей даты и времени, если сеть доступна
Пакетurllib помогает нам обрабатывать URL-адреса, которые означают веб-страницы. Здесь мы собираем данные с веб-страницы http://just-the-time.appspot.com/ и анализируем dateime с веб-страницы, используя пакет dateparser <.
Код
from urllib.request import urlopen
import dateparser
time_url = urlopen(u'http://just-the-time.appspot.com/')
datetime = time_url.read().decode("utf-8", errors="ignore").split(' ')[:-1]
date = datetime[0]
time = datetime[1]
print("Date: "+str(date))
print("Year: "+str(date.split('-')[0]))
print("Month: "+str(date.split('-')[1]))
print("Day: "+str(date.split('-')[2])+'\n')
print("Time: "+str(time))
print("Hour: "+str(time.split(':')[0]))
print("Minute: "+str(time.split(':')[1]))
print("Second: "+str(time.split(':')[2]))
Вывод будет иметь вид
Date: 2020-04-18
Year: 2020
Month: 04
Day: 18
Time: 14:17:10
Hour: 14
Minute: 17
Second: 10
Метод 3: получение текущей даты и времени по местному времени машины
Модуль Python time предоставляет функцию для получения местного времени из числа секунд, прошедших с эпохи, называемой localtime (). Функция ctime () принимает в качестве аргумента секунды, прошедшие с начала эпохи, и возвращает строку, представляющую местное время.
Код
from time import time, ctime
datetime = ctime(time()).split(' ')
print("Date: "+str(datetime[4])+"-"+str(datetime[1])+"-"+str(datetime[2]))
print("Year: "+str(datetime[4]))
print("Month: "+str(datetime[1]))
print("Day: "+str(datetime[2]))
print("Week Day: "+str(datetime[0])+'\n')
print("Time: "+str(datetime[3]))
print("Hour: "+str(datetime[3]).split(':')[0])
print("Minute: "+str(datetime[3]).split(':')[1])
print("Second: "+str(datetime[3]).split(':')[2])
Вывод будет похож на
Date: 2020-Apr-18
Year: 2020
Month: Apr
Day: 18
Week Day: Sat
Time: 19:30:20
Hour: 19
Minute: 30
Second: 20
Текущее время часового пояса
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
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
Вы можете сделать это с помощью ctime ():
from time import time, ctime
t = time()
ctime(t)
вывод:
Sat Sep 14 21:27:08 2019
Эти выходные данные отличаются, поскольку метка времени, возвращаемая ctime()
, зависит от вашего географического положения.
Этот вопрос касается Python, но поскольку Django является одной из наиболее широко используемых платформ для Python, важно отметить, что если вы используете Django, вы всегда можете использовать timezone.now()
вместо datetime.datetime.now()
. Первый "осведомлен" о часовом поясе, а второй - нет.
См. Этот ответ SO и Django doc для получения подробной информации и обоснования timezone.now()
.
from django.utils import timezone
now = timezone.now()
Получить атрибуты текущей даты и времени:
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
Это так просто. Попробуйте:
import datetime
date_time = str(datetime.datetime.now())
date = date_time.split()[0]
time = date_time.split()[1]
Этот вопрос не требует нового ответа только ради него ... блестящая новенькая игрушка / модуль, однако, является достаточным оправданием. Это библиотека Pendulum, которая, похоже, делает то, что пыталась сделать стрелка, за исключением тех недостатков и ошибок, которые присущи стрелке.
Например, ответ на исходный вопрос:
>>> 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
>>>
По-видимому, большинство из вас имеет в виду что-то другое.
И продолжаем. Короче говоря: Pendulum пытается сделать для даты и времени то, что запросы сделали для HTTP. Это заслуживает внимания, особенно из-за простоты использования и обширной документации.
Если вам просто нужна текущая отметка времени в мс (например, для измерения времени выполнения), вы также можете использовать модуль 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))
Поскольку никто еще не упомянул об этом, и это то, с чем я недавно столкнулся ... метод fromutc () pytz timezone в сочетании с utcnow () datetime - лучший способ, который я нашел, чтобы получить полезное текущее время ( и дату) в любом часовом поясе.
from datetime import datetime
import pytz
JST = pytz.timezone("Asia/Tokyo")
local_time = JST.fromutc(datetime.utcnow())
Если все, что вам нужно, это время, вы можете получить его с помощью local_time.time()
.
Удивительно, но во всех приведенных выше ответах часовые пояса не упоминались. вы также должны включить strftime, чтобы получить желаемый формат.
Я не включил это, поскольку он уже был рассмотрен в других ответах (и форматирование отображения не входило в вопрос).
Сначала импортируйте модуль datetime из datetime
from datetime import datetime
Затем выведите текущее время в формате «гггг-мм-дд чч: мм: сс»
print(str(datetime.now())
Чтобы получить только время в форме 'чч: мм: сс', где сс означает полное количество секунд плюс доля прошедших секунд, просто выполните;
print(str(datetime.now()[11:])
Преобразование datetime.now () в строку дает ответ в формате, напоминающем обычные ДАТЫ И ВРЕМЯ, к которым мы привыкли.
По умолчанию функция 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
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']
(разделитель по умолчанию это пробел).
Скобки используются для «выбора» требуемого аргумента в списке.
Достаточно вызвать всего одну строку кода. Не следует называть их так, как я, это был просто пример, потому что в некоторых случаях вы получите разные значения, редкие, но не невозможные случаи.
Вы также можете объяснить, почему извлечение частей из нескольких вызовов ctime()
таким образом (с использованием «текущего» времени при каждом вызове) не обязательно даст полезное значение в сочетании друг с другом.
Что здесь делает //
?
Вы можете использовать эту функцию, чтобы узнать время (к сожалению, здесь не указано 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]
, если вы уже используете 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'))
Использование 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
Этот метод будет устаревшим в будущих версиях pandas. Вместо этого используйте модуль datetime.
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)
или любые переменные, включая пакет. Вы можете получить все атрибуты и методы, связанные с переменной.
@snofty и @ user1016274, если import datetime
, то это datetime.datetime.now()
\ n, если from datetime import datetime
, то это datetime.now()
Почему бы не спросить США? Военно-морская обсерватория, официальный хронометрист ВМС США?
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])
Если вы живете в районе Вашингтона (как я), задержка может быть не такой уж большой ...
@ C8H10N4O2 Хотя вы правы, что другие ответы предполагают, что ваш компьютер уже знает правильное время, этот ответ предполагает, что компьютер имеет подключение к Интернету, что вы находитесь в США, и что они никогда не удалят этот файл / изменит ссылка. В этом ответе гораздо больше предположений, чем принято. Тем не менее умный
Замечательно иметь другой источник времени, чем встроенные часы! Даже неплохая альтернатива более логичному выбору NTP.
Чтобы получить точно 3 десятичные точки для миллисекунд 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)
Дополнительный контекст:
Я хочу получить время в миллисекундах. Простой способ получить их:
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)
Это работает в Python 3: time.strftime ("% H:% M:% S", time.localtime ()) + '. {}'. Format (int (time.time ()% 1 * 1000))
import datetime
date_time = str(datetime.datetime.now()).split()
date,time = date_time
date напечатает дату, а time напечатает время.
Попробуйте модуль стрелки из 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()
. Примечание: <2288>15 такая проблема. Кроме того, существуют другие проблемы, связанные с часовым поясом
Вот что я использую, чтобы узнать время без форматирования. Некоторым не нравится метод разделения, но здесь он пригодится:
from time import ctime
print ctime().split()[3]
Он будет печататься в формате ЧЧ: ММ: СС.
Как узнать текущее время в 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's 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 Epoch, что я продемонстрировал первым .
Другие способы просмотра времени гораздо более подвержены ошибкам, особенно при работе с данными, которые могут поступать из разных часовых поясов. Вы хотите, чтобы не было путаницы относительно того, для какого часового пояса предназначена строка или сериализованный объект datetime.
Если вы показываете время с помощью Python для пользователя, ctime
отлично работает, но не в таблице (обычно плохо сортируется), но, возможно, в часах. Однако я лично рекомендую при работе со временем в Python либо использовать время Unix, либо объект UTC datetime
с учетом часового пояса.
Я думаю, каждый может согласиться с тем, что ctime
должен быть самым странным способом форматирования даты и времени. Сокращенный день недели и месяца, день месяца, 24 часа ч: м: с, а затем четырехзначный год. Ботаны, которые любят сортировать строки даты, американцы, европейцы ... каждый - да, каждый - может найти как минимум две вещи, которые могут раздражать в этом формате. Хотя я воспользуюсь им, потому что это супер просто.
Как я сказал выше относительно ctime
: «Вы также можете представлять текущее время так, как предпочитает ваша операционная система (что означает, что оно может измениться, когда вы меняете системные настройки, поэтому не полагайтесь на то, что это будет стандартным для всех систем, как я видел, ожидают другие). Обычно это удобно для пользователя, но обычно не приводит к строкам, которые можно отсортировать в хронологическом порядке: "
Вы можете использовать модуль 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'
Вот что я в итоге выбрал:
>>>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.
Лучше ли использовать datetime вместо time?
Многие функции модуля time
представляют собой тонкую оболочку соответствующих функций C. datetime
- это более высокий уровень, и он обычно более переносимый.
datetime.now()
возвращает текущее время как простой объект datetime, представляющий время в местном часовом поясе. Это значение может быть неоднозначным, например во время перехода на летнее время («откат»). Во избежание двусмысленности следует использовать часовой пояс 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
К вашему сведению, не рекомендуется использовать datetime.utcnow()
для представления текущего времени в формате UTC, поскольку он по-прежнему возвращает «наивный» объект datetime - вместо этого рекомендуется использовать datetime.now(timezone.utc)
, поскольку он возвращает «осведомленный» объект datetime. Дополнительные сведения см. В документации Python: docs.python.org/3/library/…
@Seth замечает, что решение Python 3.2+ уже использует timezone.utc
. Возможно, теперь, когда Python 2.7 закрыт EOL, naive-datetime может быть удалено
Ах, я не понимал, что это было сделано исключительно для совместимости с Python 2.7 - возможно, это следует уточнить в посте? По крайней мере, мне казалось, что этот пост подразумевал, что как наивные, так и осведомленные методы были (все еще) одинаково приемлемыми способами получения времени в формате UTC, поэтому я указал, что это не то, что говорится в (последней) документации Python.
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'
Я думаю, вы хотите сказать "datetime.now (). Strftime (...)"
да, это можно сделать, как вы сказали. "datetime.datetime.now (). strftime ("% H:% M:% S:% MS ")"
% MS не дает вам миллисекунд !!
Все предыдущие ответы - хорошие предложения, но я считаю, что проще всего использовать ctime()
:
In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'
Это дает хорошо отформатированное строковое представление текущего местного времени.
OP спросил, как получить время, а не как его отобразить!
Самый быстрый способ:
>>> import time
>>> time.strftime("%Y%m%d")
'20130924'
.isoformat()
есть в документации, но еще не здесь
(это очень похоже на ответ @Ray Vega):
>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'
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'
Не имеет значения; шаг "str" выходит за рамки вопроса
@pppery Оператор также не говорит, что речь идет не о том, чтобы получить строку времени. Оператор вообще не говорит, что они хотят делать со временем, так почему же плохо показывать, как преобразовать его в строку? В большинстве ответов говорится о получении строки из времени, поэтому, похоже, это общий вариант использования, так зачем выделять ответ Рэя? Какая польза от того, чтобы просто получать время, не зная, как что-нибудь с ним сделать ? Вы можете распечатать его или вычислить, и только пара ответов показывает, как делать с ним математику, поэтому я думаю, что распечатка / получение строки - это обычное использование. ;-) (Я знаю, что это то, за чем я пришел.)
Тот факт, что у этого ответа более 440 голосов, предполагает, что незначительное добавление строкового метода было полезным для многих людей.
Тот факт, что 440 человек искали контент, который не является фактическим ответом на вопрос, не делает этот контент ответом на вопрос.
@pppery Тот факт, что это еще один способ ответа на вопрос, делает его ВАЖНЫМ для других людей, у которых есть вопрос, аналогичный этому вопросу. Так что ничего плохого в этом нет :)
Если вам нужно текущее время как объект time
:
>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)
Сделать
from time import time
t = time()
-
t
- число с плавающей запятой, подходит для измерения временного интервала.
Существует некоторая разница для платформ Unix и Windows.
Мой результат для дома с Windows 10 был 1576095264.2682993 - для Windows это может дать время в секундах.
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'
Выводит текущий GMT в указанном формате. Также существует метод localtime()
.
Эта страница содержит более подробную информацию.
Вы можете использовать time.strftime()
:
>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
Это лучше / хуже, чем ответ @ ParaMeterz ниже? Почему мы должны использовать модуль time
вместо модуля datetime
?
Он не возвращает текущий час моего компьютера.
Это время UTC, отличное от модуля datetime
@Saeed: используйте функцию localtime()
вместо gmtime()
, чтобы узнать ваше местное время.
@frank См. связанный вопрос на datetime
по сравнению с time
.
обратите внимание, что большинство проголосовавших за ответы на timezonoe-naive datetime, в то время как мы видим, что в производственной среде все больше и больше сервисов по всему миру соединяются вместе, и datetime с учетом часового пояса становится обязательным стандартом.
также для django см. здесь, чтобы узнать о часовом поясе