Який модуль / метод використовується для отримання поточного часу?
Який модуль / метод використовується для отримання поточного часу?
Відповіді:
Використання:
>>> 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()
функцію для швидкого n-брудного, трохи більш читаного людського формату:
>>> 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, але він є близьким, а тому є досить хорошим для більшості випадків ведення записів.
Однак це не ідеально для планування людини. Якщо у вас є майбутня подія, яку ви хочете провести в певний момент часу, ви хочете зберегти цей час за допомогою рядка, який можна проаналізувати в об'єкт дати або серіалізований об'єкт дати (вони будуть описані пізніше).
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
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
.
Зробіть
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 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 (як я), затримка може бути не надто поганою ...
Використання панд, щоб отримати поточний час, якийсь вид надмірної проблеми:
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.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()
повертає поточний час як наївний об'єкт часу, який представляє час у локальному часовому поясі. Це значення може бути неоднозначним, наприклад, під час переходів 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 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))
Далі - це те, що я використовую, щоб отримати час без форматування. Деяким людям не подобається метод розділення, але він корисний тут:
from time import ctime
print ctime().split()[3]
Він буде надрукований у форматі HH: MM: SS.
Тому що ніхто ще не згадав про це, і це те, з чим я стикався нещодавно ... метод 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()
.
Це питання стосується Python, але оскільки Django є однією з найбільш широко використовуваних рамок для Python, важливо відзначити, що якщо ви використовуєте Django, ви завжди можете використовувати timezone.now()
замість цього datetime.datetime.now()
. Перший часовий пояс "усвідомлює", а другий - ні.
Див цей SO відповідь і док Джанго подробиці та обґрунтування 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()
залежить від вашого географічного розташування.