Як отримати поточний час у Python


2888

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


Зверніть увагу, що більшість проголосували відповіді на timezonoe наївного DateTime, в той час як ми бачимо , що у виробничому середовищі все більше і більше послуг за всьому світу , пов'язані між собою і часовим поясом, відомо , дата і час стає необхідним стандарт
Sławomir Lénárt

Відповіді:


3049

Використання:

>>> 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.з усього вищезазначеного.


25
Було б добре, якби ця відповідь охоплювала часові пояси (можливо, наприклад, UTC) і, можливо, починалася з time.time ().
Грег Ліндаль

4
@Toskan формат не був частиною питання, тому він не повинен бути частиною відповіді. Вже є посилання на додаткову документацію модуля, яка містить такі речі, як форматування.
JiyuuSensei

У якій версії Python було дано оригінальну відповідь? Просто введення datetime.datetime.now()моєї інтерактивної консолі Python 2.7 (IronPython ще не оновлювався) дає мені таку саму поведінку, як і новіший приклад, що використовується print()у відповіді. Я не вдало повторив те, що показує оригінальна відповідь (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)). (Не те, що я дуже хочу, поведінка print () є кращою, але мені цікаво.)
RTHarston

@BobVicktor: Python 2.7, 3.7 та 3.8 усі вони відповідають однаковій поведінці для мене, не впевнені, що ви бачите.
Харлі Холкомб

@HarleyHolcombe Хм ... може, це штука IronPython? Коли я datetime.now()print(datetime.now())
набираю

955

Ви можете використовувати time.strftime():

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

48
Це краще / гірше, ніж відповідь @ ParaMeterz нижче? Чому ми повинні використовувати timeмодуль проти datetimeмодуля?
Натан

3
Він не повертає поточну годину мого комп'ютера.
Саїд

5
Це час UTC, відмінне від модуля часу
Voyager

5
@Saeed: Використовуйте функцію localtime()замість того, gmtime()щоб отримати місцевий час.
Jeyekomon

3
@frank Див споріднений питання про datetimeVS. time.
Packard CPW


456

Схожий на відповідь Гарлі , але використовуйте цю str()функцію для швидкого n-брудного, трохи більш читаного людського формату:

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

13
Все, що вона просить, - це отримати поточний час, а не відображати його.
pppery

@ppperry, а потім просто призначити змінну відповіді Рея - як-от: myTime = str (datetime.now ()) .
Лукас

2
Не стосується; крок "str" ​​не входить в рамки питання
pppery

4
@pppery Не каже, що оп не йде про те, щоб отримати рядок часу. Оп зовсім не кажуть, що вони хочуть робити з часом, тож чому погано показувати, як перетворити його на рядок? Більшість відповідей говорять про отримання рядка часу, тому, здається, це звичайний випадок використання, так чому б виділити відповідь Рея? Яка користь - просто отримати час, не знаючи, як з цим щось робити ? Ви можете роздрукувати його або зробити математику на ньому, і лише пара відповідей показує, як робити математику на ньому, тому я думаю, що друк / отримання рядка - це звичайне використання. ;-) (Я знаю, це те, за що я прийшов.)
RTHarston

1
Той факт, що ця відповідь налічує понад 440 відгуків, говорить про те, що незначне додавання рядкового методу було корисним багатьом людям.
Іоанна

360

Як дізнатися поточний час у Python?

timeмодуль

timeМодуль забезпечує функції , які говорить нам час в «секундах з початку епохи», а також інші комунальні послуги.

import time

Час Unix Epoch

Це формат, у який слід отримати часові позначки для збереження в базах даних. Це просте число з плаваючою комою, яке можна перетворити на ціле число. Це також добре для арифметики в секундах, оскільки воно представляє кількість секунд з 1 січня 1970 00:00:00, і це світло пам'яті відносно інших уявлень про час, про які ми будемо дивитись далі:

>>> time.time()
1424233311.771502

Ця часова мітка не враховує високосні секунди, тому вона не є лінійною - високосні секунди ігноруються. Тож він не є еквівалентним міжнародному стандарту UTC, але він є близьким, а тому є досить хорошим для більшості випадків ведення записів.

Однак це не ідеально для планування людини. Якщо у вас є майбутня подія, яку ви хочете провести в певний момент часу, ви хочете зберегти цей час за допомогою рядка, який можна проаналізувати в об'єкт дати або серіалізований об'єкт дати (вони будуть описані пізніше).

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

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

часовий пояс дати

Однак жоден із створених нами об'єктів дати не може бути легко перетворений у різні часові пояси. Ми можемо вирішити цю проблему за допомогою 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

Ви також можете ознайомитись з наївним об'єктом дати, використовуючи метод 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об'єкти TIMEZONE обізнаними і конвертувати раз в сотні часових поясів , доступних в pytzмодулі.

Можна було б нібито серіалізувати цей об’єкт на час UTC та зберігати його в базі даних, але це зажадає набагато більше пам’яті та більше схильне до помилок, ніж просто зберігання часу Unix Epoch, що я продемонстрував першим.

Інші способи перегляду часу набагато більше схильні до помилок, особливо при роботі з даними, які можуть надходити з різних часових поясів. Ви хочете, щоб не було плутанини щодо того, для якого часового поясу призначений рядок або серіалізований об'єкт дати.

Якщо ви відображаєте час з Python для користувача, це ctimeпрацює добре, не в таблиці (зазвичай це не добре сортується), а, можливо, за годинник. Однак я особисто рекомендую, коли маєш справу з часом у Python, або використовуючи час Unix, або об’єкт UTC, відомий часовому поясу datetime.


133

Зробіть

from time import time

t = time()
  • t - число поплавця, добре для вимірювання інтервалу часу.

Існує певна різниця для платформ Unix та Windows.


Мій результат в домашніх умовах Windows 10 становив 1576095264.2682993 - для Windows це може просто дати час у секундах.
PythonMaster202

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

Це виводить поточний GMT у визначеному форматі. Існує також localtime()метод.

На цій сторінці є детальніше.


69

Попередні відповіді - це хороші пропозиції, але мені найпростіше використовувати ctime():

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

Це дає добре відформатоване рядкове подання поточного місцевого часу.


ОП запитала, як отримати час, а не як його відображати!
TheTechRobo36414519


52

Якщо вам потрібен поточний час як timeоб’єкт:

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

36

.isoformat() є в документації, але ще не тут (це дуже схоже на відповідь @Ray Vega):

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

35

Чому б не запитати Військово-морську обсерваторію США , офіційного хронометража ВМС США?

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

Якщо ви живете в районі DC (як я), затримка може бути не надто поганою ...


18
@ C8H10N4O2 Незважаючи на те, що інші відповіді припускають, що ваш комп'ютер уже знає правильний час, ця відповідь передбачає, що комп'ютер має підключення до Інтернету, що ви перебуваєте в США і що вони ніколи не знімуть цей файл / змінити посилання. Набагато більше припущень у цій відповіді, ніж прийнятих. Але все-таки розумний
sudobangbang

33

Використання панд, щоб отримати поточний час, якийсь вид надмірної проблеми:

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

28

Ось що я закінчив:

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

Крім того, ця таблиця є необхідним посиланням для вибору відповідних кодів формату, щоб дати форматувати дату саме так, як вам потрібно (з документації Python "datetime" тут ).

Кодова таблиця формату стрифлів


2
strftime(time_format)повертає поточний локальний час у вигляді рядка, який відповідає заданому time_format. Примітка: time.strftime()і datetime.strftime()підтримують різні директиви ЕГ-, %zне підтримуються time.strftime()на Python 2 .
jfs

1
Чи краще використовувати дату замість часу?
Крістен Г.

2
Багато time функцій модуля - це тонкі обгортки навколо відповідних функцій C. datetimeце вищий рівень, і він зазвичай більш портативний.
jfs

24

якщо ви вже використовуєте numpy, то безпосередньо ви можете використовувати функцію numpy.datetime64 ().

import numpy as np
str(np.datetime64('now'))

тільки на дату:

str(np.datetime64('today'))

або, якщо ви вже використовуєте панди, тоді ви можете використовувати функцію pandas.to_datetime ()

import pandas as pd
str(pd.to_datetime('now'))

або,

str(pd.to_datetime('today'))

23

Ви можете використовувати 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'

20

datetime.now()повертає поточний час як наївний об'єкт часу, який представляє час у локальному часовому поясі. Це значення може бути неоднозначним, наприклад, під час переходів 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

18
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()
theBuzzyCoder

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

Я думаю, ти маєш на увазі сказати "datetime.now (). Strngth (...)"
hlin117

так, це можна зробити, як ви сказали. "datetime.datetime.now (). strngth ("% H:% M:% S:% MS ")"
користувач2030113

3
% MS не дає вам мілісекунд !!
ZF007

15

За замовчуванням 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

14

На це запитання не потрібна нова відповідь лише заради нього ... блискуча іграшка / модуль з новою шкірою, однак, є достатнім виправданням. Це бібліотека Маятника , яка, схоже, робить такі речі, які намагалася стрілка, за винятком випадків, коли не властиві недоліки та помилки, які задаються стрілкою.

Наприклад, відповідь на початкове запитання:

>>> 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. Це варто врахувати, особливо як простістю використання, так і великою документацією.


13

Поточний час часового поясу

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

12

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

5
будьте обережні, що arrow.now('Time/Zone')можуть не працювати протягом деяких часових поясів ( arrowвикористання dateutil, яке порушило utc -> локальні перетворення , які використовуються всередині arrow.now(). Примітка: pytzтакої проблеми не має . Також є й інші проблеми, пов’язані з
часовим поясом

12

Я хочу отримати час з мілісекундами. Простий спосіб отримати їх:

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)

1
Це працює в Python 3: time.strearch ("% H:% M:% S", time.localtime ()) + '. {}'. Формат (int (time.time ()% 1 * 1000))
Грег Грем

11

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

10

Якщо ви просто хочете, щоб поточна мітка часу в мс (наприклад, для вимірювання часу виконання), ви також можете використовувати модуль "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))

8

Далі - це те, що я використовую, щоб отримати час без форматування. Деяким людям не подобається метод розділення, але він корисний тут:

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

Він буде надрукований у форматі HH: MM: SS.


8

Тому що ніхто ще не згадав про це, і це те, з чим я стикався нещодавно ... метод timet's timeutc () в поєднанні з utcnow () datetime є найкращим способом, який я знайшов корисним поточним часом (і датою) в будь-якому часовому поясі.

from datetime import datetime

import pytz


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


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

Якщо все, що ви хочете, це час, ви можете отримати це з local_time.time().


Дивно, але всі наведені вище відповіді не згадували часові пояси. Ви також повинні включити стропіл, щоб отримати потрібний формат.
GraphicalDot

1
Я не включав це, оскільки це вже було висвітлено в інших відповідях (а форматування дисплея не було частиною запитання).
kungphu

7

Це питання стосується Python, але оскільки Django є однією з найбільш широко використовуваних рамок для Python, важливо відзначити, що якщо ви використовуєте Django, ви завжди можете використовувати timezone.now()замість цього datetime.datetime.now(). Перший часовий пояс "усвідомлює", а другий - ні.

Див цей SO відповідь і док Джанго подробиці та обґрунтування timezone.now().

from django.utils import timezone

now = timezone.now()

7

Це можна зробити за допомогою ctime ():

from time import time, ctime
t = time()
ctime(t)

вихід:

Sat Sep 14 21:27:08 2019

Ці результати відрізняються тим, що часова мітка, яка повертається, ctime()залежить від вашого географічного розташування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.