datetime
— Basic date and time types¶
Вихідний код: Lib/datetime.py
The datetime
module supplies classes for manipulating dates and times.
Хоча арифметика дати й часу підтримується, основна увага при реалізації зосереджена на ефективному вилученні атрибутів для форматування виводу та обробки.
Дивись також
Обізнані та наївні об’єкти¶
Date and time objects may be categorized as «aware» or «naive» depending on whether or not they include timezone information.
Завдяки достатнім знанням застосовних алгоритмів і політичних коригувань часу, таких як інформація про часовий пояс і літній час, свідомий об’єкт може визначити своє місцезнаходження відносно інших обізнаних об’єктів. Усвідомлюваний об’єкт представляє конкретний момент часу, який не піддається інтерпретації. 1
A naive object does not contain enough information to unambiguously locate itself relative to other date/time objects. Whether a naive object represents Coordinated Universal Time (UTC), local time, or time in some other timezone is purely up to the program, just like it is up to the program whether a particular number represents metres, miles, or mass. Naive objects are easy to understand and to work with, at the cost of ignoring some aspects of reality.
Для додатків, яким потрібні об’єкти, об’єкти datetime
і time
мають необов’язковий атрибут інформації про часовий пояс, tzinfo
, який можна встановити як екземпляр підкласу абстрактний tzinfo
клас. Ці об’єкти tzinfo
зберігають інформацію про зміщення від часу UTC, назву часового поясу та чи діє літній час.
Only one concrete tzinfo
class, the timezone
class, is
supplied by the datetime
module. The timezone
class can
represent simple timezones with fixed offsets from UTC, such as UTC itself or
North American EST and EDT timezones. Supporting timezones at deeper levels of
detail is up to the application. The rules for time adjustment across the
world are more political than rational, change frequently, and there is no
standard suitable for every application aside from UTC.
Константи¶
The datetime
module exports the following constants:
Доступні типи¶
-
class
datetime.
date
Ідеалізована наївна дата, припускаючи, що поточний григоріанський календар завжди був і завжди буде в силі. Атрибути:
year
,month
іday
.
-
class
datetime.
time
Ідеалізований час, незалежний від будь-якого конкретного дня, припускаючи, що кожен день має рівно 24*60*60 секунд. (Тут немає поняття «високосні секунди».) Атрибути:
hour
,minute
,second
,microsecond
іtzinfo
.
-
class
datetime.
datetime
Поєднання дати й часу. Атрибути:
year
,month
,day
,hour
,minute
,second
,microsecond
іtzinfo
.
-
class
datetime.
timedelta
A duration expressing the difference between two
date
,time
, ordatetime
instances to microsecond resolution.
-
class
datetime.
tzinfo
Абстрактний базовий клас для інформаційних об’єктів часового поясу. Вони використовуються класами
datetime
іtime
для надання настроюваного поняття коригування часу (наприклад, для врахування часового поясу та/або літнього часу).
-
class
datetime.
timezone
Клас, який реалізує
tzinfo
абстрактний базовий клас як фіксоване зміщення від UTC.Нове в версії 3.2.
Об’єкти цих типів незмінні.
Відносини підкласів:
object
timedelta
tzinfo
timezone
time
date
datetime
Загальні властивості¶
Типи date
, datetime
, time
і timezone
мають такі спільні риси:
Об’єкти цих типів незмінні.
Objects of these types are hashable, meaning that they can be used as dictionary keys.
Об’єкти цих типів підтримують ефективне маринування за допомогою модуля
pickle
.
Визначення того, чи є об’єкт усвідомленим чи наївним¶
Об’єкти типу date
завжди наївні.
Об’єкт типу time
або datetime
може бути обізнаним або наївним.
Об’єкт datetime
d відомий, якщо виконуються обидва наступні умови:
d.tzinfo
не єNone
d.tzinfo.utcoffset(d)
не повертаєNone
Інакше d наївно.
Об’єкт time
t усвідомлює, якщо виконуються обидва наступні умови:
t.tzinfo
не єNone
t.tzinfo.utcoffset(None)
не повертаєNone
.
В іншому випадку t наївний.
Розрізнення між обізнаним і наївним не стосується об’єктів timedelta
.
timedelta
Об’єкти¶
A timedelta
object represents a duration, the difference between two
dates or times.
-
class
datetime.
timedelta
(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)¶ All arguments are optional and default to
0
. Arguments may be integers or floats, and may be positive or negative.Усередині зберігаються лише дні, секунди та мікросекунди. Аргументи конвертуються в такі одиниці:
Мілісекунда перетворюється на 1000 мікросекунд.
Хвилина перетворюється на 60 секунд.
Година перетворюється на 3600 секунд.
Тиждень перетворюється на 7 днів.
і дні, секунди та мікросекунди потім нормалізуються, щоб представлення було унікальним, з
0 <= мікросекунди < 1000000
0 <= секунд < 3600*24
(кількість секунд в одному дні)-999999999 <= днів <= 999999999
У наступному прикладі показано, як будь-які аргументи, окрім днів, секунд і мікросекунд, «об’єднуються» та нормалізуються в ці три отримані атрибути:
>>> from datetime import timedelta >>> delta = timedelta( ... days=50, ... seconds=27, ... microseconds=10, ... milliseconds=29000, ... minutes=5, ... hours=8, ... weeks=2 ... ) >>> # Only days, seconds, and microseconds remain >>> delta datetime.timedelta(days=64, seconds=29156, microseconds=10)
Якщо будь-який аргумент є числом із плаваючою точкою та є дробові мікросекунди, дробові мікросекунди, що залишилися від усіх аргументів, об’єднуються, а їхня сума округлюється до найближчої мікросекунди за допомогою тай-брейку округлення від половини до навіть. Якщо жоден аргумент не є числом з плаваючою речовиною, процеси перетворення та нормалізації є точними (інформація не втрачається).
Якщо нормалізоване значення днів лежить за межами зазначеного діапазону, виникає
OverflowError
.Зверніть увагу, що нормалізація від’ємних значень спочатку може викликати подив. Наприклад:
>>> from datetime import timedelta >>> d = timedelta(microseconds=-1) >>> (d.days, d.seconds, d.microseconds) (-1, 86399, 999999)
Атрибути класу:
-
timedelta.
max
¶ Найбільш позитивний об’єкт
timedelta
,timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
.
-
timedelta.
resolution
¶ Найменша можлива різниця між нерівними об’єктами
timedelta
,timedelta(microseconds=1)
.
Note that, because of normalization, timedelta.max
> -timedelta.min
.
-timedelta.max
is not representable as a timedelta
object.
Атрибути екземпляра (тільки для читання):
Attribute |
Value |
---|---|
|
Between -999999999 and 999999999 inclusive |
|
Between 0 and 86399 inclusive |
|
Between 0 and 999999 inclusive |
Підтримувані операції:
Операція |
Результат |
---|---|
|
Sum of t2 and t3. Afterwards t1-t2 == t3 and t1-t3 == t2 are true. (1) |
|
Difference of t2 and t3. Afterwards t1 == t2 - t3 and t2 == t1 + t3 are true. (1)(6) |
|
Delta multiplied by an integer.
Afterwards t1 // i == t2 is true,
provided |
In general, t1 * i == t1 * (i-1) + t1 is true. (1) |
|
|
Дельта, помножена на float. Результат округлюється до найближчого кратного timedelta.resolution за допомогою округлення від половини до навіть. |
|
Division (3) of overall duration t2 by
interval unit t3. Returns a |
|
Дельта, поділена на float або int. Результат округлюється до найближчого кратного timedelta.resolution за допомогою округлення від половини до навіть. |
|
Підлога обчислюється, а залишок (якщо є) викидається. У другому випадку повертається ціле число. (3) |
|
Залишок обчислюється як об’єкт |
|
Обчислює частку та залишок: |
|
Повертає об’єкт |
|
equivalent to
|
|
equivalent to +t when |
|
Повертає рядок у формі |
|
Повертає рядкове представлення об’єкта |
Примітки:
Це точно, але може переповнюватись.
Це точно і не може переповнюватися.
Division by 0 raises
ZeroDivisionError
.-timedelta.max is not representable as a
timedelta
object.Рядкові представлення об’єктів
timedelta
нормалізуються подібно до їх внутрішнього представлення. Це призводить до дещо незвичайних результатів для негативних часових дельт. Наприклад:>>> timedelta(hours=-5) datetime.timedelta(days=-1, seconds=68400) >>> print(_) -1 day, 19:00:00
Вираз
t2 - t3
завжди дорівнюватиме виразуt2 + (-t3)
, за винятком випадків, коли t3 дорівнюєtimedelta.max
; у цьому випадку перший дасть результат, а другий переповниться.
Окрім перерахованих вище операцій, об’єкти timedelta
підтримують певні додавання та віднімання за допомогою об’єктів date
і datetime
(див. нижче).
Змінено в версії 3.2: Тепер підтримується поділ на поверх і справжній поділ об’єкта timedelta
на інший об’єкт timedelta
, а також операції з залишком і функція divmod()
. Тепер підтримується справжнє ділення та множення об’єкта timedelta
на об’єкт float
.
Comparisons of timedelta
objects are supported, with some caveats.
The comparisons ==
or !=
always return a bool
, no matter
the type of the compared object:
>>> from datetime import timedelta
>>> delta1 = timedelta(seconds=57)
>>> delta2 = timedelta(hours=25, seconds=2)
>>> delta2 != delta1
True
>>> delta2 == 5
False
For all other comparisons (such as <
and >
), when a timedelta
object is compared to an object of a different type, TypeError
is raised:
>>> delta2 > delta1
True
>>> delta2 > 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'datetime.timedelta' and 'int'
У логічних контекстах об’єкт timedelta
вважається істинним тоді і тільки тоді, коли він не дорівнює timedelta(0)
.
Методи екземплярів:
-
timedelta.
total_seconds
()¶ Повертає загальну кількість секунд, що міститься в тривалості. Еквівалент
td / timedelta(seconds=1)
. Для одиниць інтервалу, відмінних від секунд, використовуйте напряму форму ділення (наприклад,td / timedelta(мікросекунди=1)
).Зауважте, що для дуже великих інтервалів часу (понад 270 років на більшості платформ) цей метод втратить мікросекундну точність.
Нове в версії 3.2.
Приклади використання: timedelta
¶
Додатковий приклад нормалізації:
>>> # Components of another_year add up to exactly 365 days
>>> from datetime import timedelta
>>> year = timedelta(days=365)
>>> another_year = timedelta(weeks=40, days=84, hours=23,
... minutes=50, seconds=600)
>>> year == another_year
True
>>> year.total_seconds()
31536000.0
Приклади арифметики timedelta
:
>>> from datetime import timedelta
>>> year = timedelta(days=365)
>>> ten_years = 10 * year
>>> ten_years
datetime.timedelta(days=3650)
>>> ten_years.days // 365
10
>>> nine_years = ten_years - year
>>> nine_years
datetime.timedelta(days=3285)
>>> three_years = nine_years // 3
>>> three_years, three_years.days // 365
(datetime.timedelta(days=1095), 3)
date
Об’єкти¶
Об’єкт date
представляє дату (рік, місяць і день) в ідеалізованому календарі, поточний григоріанський календар необмежено розширений в обох напрямках.
1 січня року 1 називається днем номер 1, 2 січня року 1 називається днем номер 2 і так далі. 2
-
class
datetime.
date
(year, month, day)¶ Всі аргументи необхідні. Аргументи мають бути цілими числами в таких діапазонах:
MINYEAR <= рік <= MAXYEAR
1 <= місяць <= 12
1 <= день <= кількість днів у заданому місяці та році
Якщо вказано аргумент поза цими діапазонами, виникає
ValueError
.
Інші конструктори, усі методи класу:
-
classmethod
date.
today
()¶ Повернути поточну місцеву дату.
Це еквівалентно
date.fromtimestamp(time.time())
.
-
classmethod
date.
fromtimestamp
(timestamp)¶ Повертає місцеву дату, що відповідає мітці часу POSIX, наприклад, яку повертає
time.time()
.Це може спричинити помилку
OverflowError
, якщо позначка часу виходить за межі діапазону значень, які підтримує функція Clocaltime()
, іOSError
уlocaltime()
невдача. Зазвичай це обмежується роками з 1970 по 2038 рік. Зауважте, що в системах без POSIX, які включають високосні секунди в своє поняття позначки часу, високосні секунди ігноруютьсяfromtimestamp()
.Змінено в версії 3.3: Викликайте
OverflowError
замістьValueError
, якщо позначка часу виходить за межі діапазону значень, які підтримує функція Clocaltime()
платформи. ВикликатиOSError
замістьValueError
у разі помилкиlocaltime()
.
-
classmethod
date.
fromordinal
(ordinal)¶ Повертає дату, що відповідає пролептичному григоріанському порядковому номеру, де 1 січня 1 року має порядковий номер 1.
ValueError
викликається, якщо не1 <= ordinal <= date.max.toordinal()
. Для будь-якої дати ddate.fromordinal(d.toordinal()) == d
.
-
classmethod
date.
fromisoformat
(date_string)¶ Return a
date
corresponding to a date_string given in the formatYYYY-MM-DD
:>>> from datetime import date >>> date.fromisoformat('2019-12-04') datetime.date(2019, 12, 4)
This is the inverse of
date.isoformat()
. It only supports the formatYYYY-MM-DD
.Нове в версії 3.7.
-
classmethod
date.
fromisocalendar
(year, week, day)¶ Повертає
date
, що відповідає календарній даті ISO, визначеній роком, тижнем і днем. Це зворотна функціяdate.isocalendar()
.Нове в версії 3.8.
Атрибути класу:
-
date.
min
¶ Найраніша дата, яку можна представити,
date(MINYEAR, 1, 1)
.
-
date.
max
¶ Остання представлена дата,
date(MAXYEAR, 12, 31)
.
-
date.
resolution
¶ Найменша можлива різниця між об’єктами нерівних дат,
timedelta(days=1)
.
Атрибути екземпляра (тільки для читання):
-
date.
month
¶ Від 1 до 12 включно.
-
date.
day
¶ Від 1 до числа днів у даному місяці даного року.
Підтримувані операції:
Операція |
Результат |
---|---|
|
date2 is |
|
Computes date2 such that |
|
(3) |
|
date1 is considered less than date2 when date1 precedes date2 in time. (4) |
Примітки:
date2 пересувається вперед у часі, якщо
timedelta.days > 0
, або назад,timedelta.days < 0
. Після цьогоdate2 - date1 == timedelta.days
.timedelta.seconds
іtimedelta.microseconds
ігноруються.OverflowError
виникає, якщоdate2.year
буде меншим заMINYEAR
або більшим заMAXYEAR
.timedelta.seconds
іtimedelta.microseconds
ігноруються.This is exact, and cannot overflow. timedelta.seconds and timedelta.microseconds are 0, and date2 + timedelta == date1 after.
In other words,
date1 < date2
if and only ifdate1.toordinal() < date2.toordinal()
. Date comparison raisesTypeError
if the other comparand isn’t also adate
object. However,NotImplemented
is returned instead if the other comparand has atimetuple()
attribute. This hook gives other kinds of date objects a chance at implementing mixed-type comparison. If not, when adate
object is compared to an object of a different type,TypeError
is raised unless the comparison is==
or!=
. The latter cases returnFalse
orTrue
, respectively.
У логічних контекстах усі об’єкти date
вважаються істинними.
Методи екземплярів:
-
date.
replace
(year=self.year, month=self.month, day=self.day)¶ Повертає дату з тим самим значенням, за винятком тих параметрів, яким надано нові значення за будь-якими аргументами ключового слова.
Приклад:
>>> from datetime import date >>> d = date(2002, 12, 31) >>> d.replace(day=26) datetime.date(2002, 12, 26)
-
date.
timetuple
()¶ Повертає
time.struct_time
, наприклад, повертаєtime.localtime()
.Години, хвилини та секунди дорівнюють 0, а позначка літнього часу дорівнює -1.
d.timetuple()
еквівалентний:time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1))
where
yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1
is the day number within the current year starting with1
for January 1st.
-
date.
toordinal
()¶ Повертає пролептичний григоріанський порядковий номер дати, де 1 січня року 1 має порядковий номер 1. Для будь-якого об’єкта
date
d,date.fromordinal(d.toordinal()) == d
.
-
date.
weekday
()¶ Повертає день тижня як ціле число, де понеділок — 0, а неділя — 6. Наприклад,
date(2002, 12, 4).weekday() == 2
, середа. Дивіться такожisoweekday()
.
-
date.
isoweekday
()¶ Повертає день тижня як ціле число, де понеділок — 1, а неділя — 7. Наприклад,
date(2002, 12, 4).isoweekday() == 3
, середа. Дивіться такожweekday()
,isocalendar()
.
-
date.
isocalendar
()¶ Повертає об’єкт named tuple із трьома компонентами:
year
,week
іweekday
.Календар ISO є широко використовуваним варіантом григоріанського календаря. 3
Рік ISO складається з 52 або 53 повних тижнів, де тиждень починається в понеділок і закінчується в неділю. Перший тиждень року ISO — це перший (григоріанський) календарний тиждень року, що містить четвер. Це називається тижнем номер 1, і рік ISO того четверга такий же, як його григоріанський рік.
Наприклад, 2004 рік починається в четвер, тому перший тиждень 2004 року ISO починається в понеділок, 29 грудня 2003 року, і закінчується в неділю, 4 січня 2004 року:
>>> from datetime import date >>> date(2003, 12, 29).isocalendar() datetime.IsoCalendarDate(year=2004, week=1, weekday=1) >>> date(2004, 1, 4).isocalendar() datetime.IsoCalendarDate(year=2004, week=1, weekday=7)
Змінено в версії 3.9: Результат змінено з кортежу на named tuple.
-
date.
isoformat
()¶ Повертає рядок, що представляє дату у форматі ISO 8601,
РРРР-ММ-ДД
:>>> from datetime import date >>> date(2002, 12, 4).isoformat() '2002-12-04'
This is the inverse of
date.fromisoformat()
.
-
date.
__str__
()¶ Для дати d
str(d)
еквівалентноd.isoformat()
.
-
date.
ctime
()¶ Повертає рядок, що представляє дату:
>>> from datetime import date >>> date(2002, 12, 4).ctime() 'Wed Dec 4 00:00:00 2002'
d.ctime()
еквівалентний:time.ctime(time.mktime(d.timetuple()))
на платформах, де рідна функція C
ctime()
(якуtime.ctime()
викликає, але якуdate.ctime()
не викликає) відповідає стандарту C.
-
date.
strftime
(format)¶ Return a string representing the date, controlled by an explicit format string. Format codes referring to hours, minutes or seconds will see 0 values. For a complete list of formatting directives, see strftime() and strptime() Behavior.
-
date.
__format__
(format)¶ Same as
date.strftime()
. This makes it possible to specify a format string for adate
object in formatted string literals and when usingstr.format()
. For a complete list of formatting directives, see strftime() and strptime() Behavior.
Приклади використання: date
¶
Приклад підрахунку днів до події:
>>> import time
>>> from datetime import date
>>> today = date.today()
>>> today
datetime.date(2007, 12, 5)
>>> today == date.fromtimestamp(time.time())
True
>>> my_birthday = date(today.year, 6, 24)
>>> if my_birthday < today:
... my_birthday = my_birthday.replace(year=today.year + 1)
>>> my_birthday
datetime.date(2008, 6, 24)
>>> time_to_birthday = abs(my_birthday - today)
>>> time_to_birthday.days
202
Ще приклади роботи з date
:
>>> from datetime import date
>>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
>>> d
datetime.date(2002, 3, 11)
>>> # Methods related to formatting string output
>>> d.isoformat()
'2002-03-11'
>>> d.strftime("%d/%m/%y")
'11/03/02'
>>> d.strftime("%A %d. %B %Y")
'Monday 11. March 2002'
>>> d.ctime()
'Mon Mar 11 00:00:00 2002'
>>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
'The day is 11, the month is March.'
>>> # Methods for to extracting 'components' under different calendars
>>> t = d.timetuple()
>>> for i in t:
... print(i)
2002 # year
3 # month
11 # day
0
0
0
0 # weekday (0 = Monday)
70 # 70th day in the year
-1
>>> ic = d.isocalendar()
>>> for i in ic:
... print(i)
2002 # ISO year
11 # ISO week number
1 # ISO day number ( 1 = Monday )
>>> # A date object is immutable; all operations produce a new object
>>> d.replace(year=2005)
datetime.date(2005, 3, 11)
datetime
Об’єкти¶
Об’єкт datetime
— це єдиний об’єкт, який містить всю інформацію з об’єктів date
і time
.
Як і об’єкт date
, datetime
передбачає поточний григоріанський календар, розширений в обох напрямках; як і об’єкт time
, datetime
припускає, що кожен день становить рівно 3600*24 секунди.
Конструктор:
-
class
datetime.
datetime
(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)¶ Аргументи рік, місяць і день є обов’язковими. tzinfo може бути
None
або екземпляром підкласуtzinfo
. Решта аргументів мають бути цілими числами в таких діапазонах:MINYEAR <= рік <= MAXYEAR
,1 <= місяць <= 12
,1 <= день <= кількість днів у заданому місяці та році
,0 <= година < 24
,0 <= хвилина < 60
,0 <= секунда < 60
,0 <= мікросекунда < 1000000
,згорнути [0, 1]
.
Якщо вказано аргумент поза цими діапазонами, виникає
ValueError
.Нове в версії 3.6: Added the
fold
argument.
Інші конструктори, усі методи класу:
-
classmethod
datetime.
today
()¶ Return the current local datetime, with
tzinfo
None
.Дорівнює:
datetime.fromtimestamp(time.time())
Дивіться також
now()
,fromtimestamp()
.Цей метод функціонально еквівалентний
now()
, але без параметраtz
.
-
classmethod
datetime.
now
(tz=None)¶ Повернути поточну місцеву дату й час.
Якщо необов’язковий аргумент tz має значення
None
або не вказано, це схоже наtoday()
, але, якщо можливо, надає більшу точність, ніж можна отримати, пройшовши черезtime.time()
мітка часу (наприклад, це можливо на платформах, що забезпечують функцію Cgettimeofday()
).Якщо tz не є
None
, він має бути екземпляром підкласуtzinfo
, а поточні дата й час перетворюються на часовий пояс tz.
-
classmethod
datetime.
utcnow
()¶ Повертає поточну дату й час за UTC за допомогою
tzinfo
None
.Це схоже на
now()
, але повертає поточну дату та час у форматі UTC як простий об’єктdatetime
. Відомий поточний UTC datetime можна отримати, викликавшиdatetime.now(timezone.utc)
. Дивіться такожnow()
.Попередження
Оскільки наївні об’єкти
datetime
розглядаються багатьма методамиdatetime
як місцевий час, бажано використовувати відомі дати для представлення часу в UTC. Таким чином, рекомендований спосіб створити об’єкт, що представляє поточний час у UTC, — це викликатиdatetime.now(timezone.utc)
.
-
classmethod
datetime.
fromtimestamp
(timestamp, tz=None)¶ Повертає локальну дату й час, що відповідають мітці часу POSIX, наприклад, повертає
time.time()
. Якщо необов’язковий аргумент tz має значенняNone
або не вказано, позначка часу перетворюється на локальну дату й час платформи, а повернутий об’єктdatetime
є простим.Якщо tz не є
None
, він має бути екземпляром підкласуtzinfo
, а мітка часу перетворюється на часовий пояс tz.fromtimestamp()
може викликатиOverflowError
, якщо мітка часу виходить за межі діапазону значень, які підтримуються функціями платформи Clocaltime()
абоgmtime()
, іOSError
під час помилкиlocaltime()
абоgmtime()
. Зазвичай це обмежується роками з 1970 по 2038 рік. Зауважте, що в системах без POSIX, які включають високосні секунди в своє поняття позначки часу, високосні секунди ігноруютьсяfromtimestamp()
, і тоді можна мати дві мітки часу, що відрізняються на секунду, що дає ідентичні об’єктиdatetime
. Цей метод є кращим передutcfromtimestamp()
.Змінено в версії 3.3: Викликайте
OverflowError
замістьValueError
, якщо позначка часу виходить за межі діапазону значень, які підтримують функції Clocaltime()
абоgmtime()
платформи. ВикликатиOSError
замістьValueError
у разі помилкиlocaltime()
абоgmtime()
.Змінено в версії 3.6:
fromtimestamp()
може повертати екземпляри зfold
, встановленим на 1.
-
classmethod
datetime.
utcfromtimestamp
(timestamp)¶ Повертає UTC
datetime
, що відповідає мітці часу POSIX, зtzinfo
None
. (Отриманий об’єкт наївний.)Це може спричинити помилку
OverflowError
, якщо позначка часу виходить за межі значень, які підтримує функція платформи Cgmtime()
, іOSError
наgmtime()
невдача. Зазвичай це обмежується роками з 1970 по 2038 рік.Щоб отримати відомий об’єкт
datetime
, викличтеfromtimestamp()
:datetime.fromtimestamp(timestamp, timezone.utc)
На POSIX-сумісних платформах це еквівалентно такому виразу:
datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
за винятком останньої формули, яка завжди підтримує повний діапазон років: від
MINYEAR
доMAXYEAR
включно.Попередження
Оскільки наївні об’єкти
datetime
розглядаються багатьма методамиdatetime
як місцевий час, бажано використовувати відомі дати для представлення часу в UTC. Таким чином, рекомендований спосіб створити об’єкт, що представляє конкретну позначку часу в UTC, — це викликатиdatetime.fromtimestamp(timestamp, tz=timezone.utc)
.Змінено в версії 3.3: Викликайте
OverflowError
замістьValueError
, якщо позначка часу виходить за межі діапазону значень, які підтримує функція Cgmtime()
платформи. ВикликатиOSError
замістьValueError
у разі помилкиgmtime()
.
-
classmethod
datetime.
fromordinal
(ordinal)¶ Повертає
datetime
, що відповідає пролептичному григоріанському порядковому номеру, де 1 січня року 1 має порядковий номер 1.ValueError
виникає, якщо не1 <= порядковий <= datetime.max.toordinal()
. Година, хвилина, секунда та мікросекунда результату дорівнюють 0, аtzinfo
—None
.
-
classmethod
datetime.
combine
(date, time, tzinfo=self.tzinfo)¶ Return a new
datetime
object whose date components are equal to the givendate
object’s, and whose time components are equal to the giventime
object’s. If the tzinfo argument is provided, its value is used to set thetzinfo
attribute of the result, otherwise thetzinfo
attribute of the time argument is used.For any
datetime
object d,d == datetime.combine(d.date(), d.time(), d.tzinfo)
. If date is adatetime
object, its time components andtzinfo
attributes are ignored.Змінено в версії 3.6: Додано аргумент tzinfo.
-
classmethod
datetime.
fromisoformat
(date_string)¶ Return a
datetime
corresponding to a date_string in one of the formats emitted bydate.isoformat()
anddatetime.isoformat()
.Specifically, this function supports strings in the format:
YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
where
*
can match any single character.Застереження
This does not support parsing arbitrary ISO 8601 strings - it is only intended as the inverse operation of
datetime.isoformat()
. A more full-featured ISO 8601 parser,dateutil.parser.isoparse
is available in the third-party package dateutil.Приклади:
>>> from datetime import datetime >>> datetime.fromisoformat('2011-11-04') datetime.datetime(2011, 11, 4, 0, 0) >>> datetime.fromisoformat('2011-11-04T00:05:23') datetime.datetime(2011, 11, 4, 0, 5, 23) >>> datetime.fromisoformat('2011-11-04 00:05:23.283') datetime.datetime(2011, 11, 4, 0, 5, 23, 283000) >>> datetime.fromisoformat('2011-11-04 00:05:23.283+00:00') datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc) >>> datetime.fromisoformat('2011-11-04T00:05:23+04:00') datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
Нове в версії 3.7.
-
classmethod
datetime.
fromisocalendar
(year, week, day)¶ Повертає
datetime
, що відповідає календарній даті ISO, визначеній роком, тижнем і днем. Компоненти datetime, що не є датою, заповнюються стандартними значеннями за замовчуванням. Це зворотна функціяdatetime.isocalendar()
.Нове в версії 3.8.
-
classmethod
datetime.
strptime
(date_string, format)¶ Повертає
datetime
, що відповідає рядку_дати, розібраному відповідно до формату.This is equivalent to:
datetime(*(time.strptime(date_string, format)[0:6]))
ValueError
is raised if the date_string and format can’t be parsed bytime.strptime()
or if it returns a value which isn’t a time tuple. For a complete list of formatting directives, see strftime() and strptime() Behavior.
Атрибути класу:
-
datetime.
max
¶ Останній представлений
datetime
,datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)
.
-
datetime.
resolution
¶ Найменша можлива різниця між нерівними об’єктами
datetime
,timedelta(microseconds=1)
.
Атрибути екземпляра (тільки для читання):
-
datetime.
month
¶ Від 1 до 12 включно.
-
datetime.
day
¶ Від 1 до числа днів у даному місяці даного року.
-
datetime.
hour
¶ У діапазоні (24).
-
datetime.
minute
¶ У
діапазоні (60)
.
-
datetime.
second
¶ У
діапазоні (60)
.
-
datetime.
microsecond
¶ У
діапазоні (1000 000)
.
-
datetime.
tzinfo
¶ Об’єкт передається як аргумент tzinfo конструктору
datetime
абоNone
, якщо жодного не було передано.
-
datetime.
fold
¶ In
[0, 1]
. Used to disambiguate wall times during a repeated interval. (A repeated interval occurs when clocks are rolled back at the end of daylight saving time or when the UTC offset for the current zone is decreased for political reasons.) The value 0 (1) represents the earlier (later) of the two moments with the same wall time representation.Нове в версії 3.6.
Підтримувані операції:
Операція |
Результат |
---|---|
|
(1) |
|
(2) |
|
(3) |
|
datetime2 is a duration of timedelta removed from datetime1, moving forward in time if
timedelta.days
> 0, or backward iftimedelta.days
< 0. The result has the sametzinfo
attribute as the input datetime, and datetime2 - datetime1 == timedelta after.OverflowError
is raised if datetime2.year would be smaller thanMINYEAR
or larger thanMAXYEAR
. Note that no time zone adjustments are done even if the input is an aware object.Computes the datetime2 such that datetime2 + timedelta == datetime1. As for addition, the result has the same
tzinfo
attribute as the input datetime, and no time zone adjustments are done even if the input is aware.Віднімання
datetime
відdatetime
визначається, лише якщо обидва операнди наївні, або якщо обидва знають. Якщо один знає, а інший наївний, виникаєTypeError
.Якщо обидва наївні, або обидва знають і мають однаковий атрибут
tzinfo
, атрибутиtzinfo
ігноруються, і результатом єtimedelta
об’єкт t такий, щоdatetime2 + t == datetime1
. У цьому випадку коригування часового поясу не виконується.If both are aware and have different
tzinfo
attributes,a-b
acts as if a and b were first converted to naive UTC datetimes first. The result is(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None) - b.utcoffset())
except that the implementation never overflows.datetime1 is considered less than datetime2 when datetime1 precedes datetime2 in time.
If one comparand is naive and the other is aware,
TypeError
is raised if an order comparison is attempted. For equality comparisons, naive instances are never equal to aware instances.If both comparands are aware, and have the same
tzinfo
attribute, the commontzinfo
attribute is ignored and the base datetimes are compared. If both comparands are aware and have differenttzinfo
attributes, the comparands are first adjusted by subtracting their UTC offsets (obtained fromself.utcoffset()
).Змінено в версії 3.3: Порівняння рівності між обізнаними та наївними екземплярами
datetime
не викликаєTypeError
.Примітка
In order to stop comparison from falling back to the default scheme of comparing object addresses, datetime comparison normally raises
TypeError
if the other comparand isn’t also adatetime
object. However,NotImplemented
is returned instead if the other comparand has atimetuple()
attribute. This hook gives other kinds of date objects a chance at implementing mixed-type comparison. If not, when adatetime
object is compared to an object of a different type,TypeError
is raised unless the comparison is==
or!=
. The latter cases returnFalse
orTrue
, respectively.
Методи екземплярів:
-
datetime.
time
()¶ Повертає об’єкт
time
із тією самою годиною, хвилиною, секундою, мікросекундою та згортанням.tzinfo
— цеNone
. Дивіться також методtimetz()
.Змінено в версії 3.6: Значення згортання копіюється до повернутого об’єкта
time
.
-
datetime.
timetz
()¶ Повертає об’єкт
time
з такими самими атрибутами: година, хвилина, секунда, мікросекунда, згортання та tzinfo. Дивіться також методtime()
.Змінено в версії 3.6: Значення згортання копіюється до повернутого об’єкта
time
.
-
datetime.
replace
(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)¶ Повертає дату й час із тими самими атрибутами, за винятком тих атрибутів, яким надано нові значення за будь-якими аргументами ключового слова. Зауважте, що
tzinfo=None
можна вказати для створення простої дати-часу з усвідомленої дати-часу без перетворення даних дати й часу.Нове в версії 3.6: Added the
fold
argument.
-
datetime.
astimezone
(tz=None)¶ Повертає об’єкт
datetime
з новим атрибутомtzinfo
tz, регулюючи дані дати й часу таким чином, щоб результат був таким самим часом UTC, як self, але в tz місцевий час.If provided, tz must be an instance of a
tzinfo
subclass, and itsutcoffset()
anddst()
methods must not returnNone
. If self is naive, it is presumed to represent time in the system timezone.If called without arguments (or with
tz=None
) the system local timezone is assumed for the target timezone. The.tzinfo
attribute of the converted datetime instance will be set to an instance oftimezone
with the zone name and offset obtained from the OS.If
self.tzinfo
is tz,self.astimezone(tz)
is equal to self: no adjustment of date or time data is performed. Else the result is local time in the timezone tz, representing the same UTC time as self: afterastz = dt.astimezone(tz)
,astz - astz.utcoffset()
will have the same date and time data asdt - dt.utcoffset()
.If you merely want to attach a time zone object tz to a datetime dt without adjustment of date and time data, use
dt.replace(tzinfo=tz)
. If you merely want to remove the time zone object from an aware datetime dt without conversion of date and time data, usedt.replace(tzinfo=None)
.Зауважте, що стандартний метод
tzinfo.fromutc()
можна замінити в підкласіtzinfo
, щоб вплинути на результат, який повертаєastimezone()
. Ігноруючи випадки помилок,astimezone()
діє як:def astimezone(self, tz): if self.tzinfo is tz: return self # Convert self to UTC, and attach the new time zone object. utc = (self - self.utcoffset()).replace(tzinfo=tz) # Convert from UTC to tz's local time. return tz.fromutc(utc)
Змінено в версії 3.3: tz тепер можна опустити.
Змінено в версії 3.6: Метод
astimezone()
тепер можна викликати в простих екземплярах, які, як припускається, представляють місцевий час системи.
-
datetime.
utcoffset
()¶ Якщо
tzinfo
має значенняNone
, повертаєNone
, інакше повертаєself.tzinfo.utcoffset(self)
і викликає виняток, якщо останній не повертаєNone
або об’єктtimedelta
з величиною менше одного дня.Змінено в версії 3.7: Зсув UTC не обмежений цілою кількістю хвилин.
-
datetime.
dst
()¶ Якщо
tzinfo
має значенняNone
, повертаєNone
, інакше повертаєself.tzinfo.dst(self)
і викликає виняток, якщо останній не повертаєNone
або об’єктtimedelta
з величиною менше одного дня.Змінено в версії 3.7: Зміщення літнього часу не обмежується цілою кількістю хвилин.
-
datetime.
tzname
()¶ Якщо
tzinfo
має значенняNone
, повертаєNone
, інакше повертаєself.tzinfo.tzname(self)
, викликає виняток, якщо останній не повертаєNone
або рядковий об’єкт,
-
datetime.
timetuple
()¶ Повертає
time.struct_time
, наприклад, повертаєtime.localtime()
.d.timetuple()
еквівалентний:time.struct_time((d.year, d.month, d.day, d.hour, d.minute, d.second, d.weekday(), yday, dst))
where
yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1
is the day number within the current year starting with1
for January 1st. Thetm_isdst
flag of the result is set according to thedst()
method:tzinfo
isNone
ordst()
returnsNone
,tm_isdst
is set to-1
; else ifdst()
returns a non-zero value,tm_isdst
is set to1
; elsetm_isdst
is set to0
.
-
datetime.
utctimetuple
()¶ If
datetime
instance d is naive, this is the same asd.timetuple()
except thattm_isdst
is forced to 0 regardless of whatd.dst()
returns. DST is never in effect for a UTC time.If d is aware, d is normalized to UTC time, by subtracting
d.utcoffset()
, and atime.struct_time
for the normalized time is returned.tm_isdst
is forced to 0. Note that anOverflowError
may be raised if d.year wasMINYEAR
orMAXYEAR
and UTC adjustment spills over a year boundary.Попередження
Because naive
datetime
objects are treated by manydatetime
methods as local times, it is preferred to use aware datetimes to represent times in UTC; as a result, usingutcfromtimetuple
may give misleading results. If you have a naivedatetime
representing UTC, usedatetime.replace(tzinfo=timezone.utc)
to make it aware, at which point you can usedatetime.timetuple()
.
-
datetime.
toordinal
()¶ Повертає пролептичний григоріанський порядковий номер дати. Те саме, що
self.date().toordinal()
.
-
datetime.
timestamp
()¶ Повертає позначку часу POSIX, що відповідає екземпляру
datetime
. Значення, що повертається, єfloat
, подібне до того, яке повертаєtime.time()
.Naive
datetime
instances are assumed to represent local time and this method relies on the platform Cmktime()
function to perform the conversion. Sincedatetime
supports wider range of values thanmktime()
on many platforms, this method may raiseOverflowError
for times far in the past or far in the future.Для екземплярів aware
datetime
значення, що повертається, обчислюється як:(dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
Нове в версії 3.3.
Змінено в версії 3.6: Метод
timestamp()
використовує атрибутfold
, щоб усунути неоднозначність часу протягом повторюваного інтервалу.Примітка
There is no method to obtain the POSIX timestamp directly from a naive
datetime
instance representing UTC time. If your application uses this convention and your system timezone is not set to UTC, you can obtain the POSIX timestamp by supplyingtzinfo=timezone.utc
:timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
або шляхом безпосереднього обчислення позначки часу:
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
-
datetime.
weekday
()¶ Повертає день тижня як ціле число, де понеділок дорівнює 0, а неділя – 6. Те саме, що
self.date().weekday()
. Дивіться такожisoweekday()
.
-
datetime.
isoweekday
()¶ Повертає день тижня як ціле число, де понеділок — 1, а неділя — 7. Те саме, що
self.date().isoweekday()
. Дивіться такожweekday()
,isocalendar()
.
-
datetime.
isocalendar
()¶ Повертає named tuple із трьома компонентами:
рік
,тиждень
ідень тижня
. Те саме, щоself.date().isocalendar()
.
-
datetime.
isoformat
(sep='T', timespec='auto')¶ Повертає рядок, що представляє дату й час у форматі ISO 8601:
РРРР-ММ-ДДТГГ:ММ:СС.ffffff
, якщоmicrosecond
не дорівнює 0РРРР-ММ-ДДТГГ:ХМ:СС
, якщоmicrosecond
дорівнює 0
Якщо
utcoffset()
не повертаєNone
, додається рядок із зміщенням UTC:РРРР-ММ-ДДТГГ:ММ:СС.ffffff+ГГ:ММ[:СС[.ffffff]]
, якщоmicrosecond
не дорівнює 0РРРР-ММ-ДДТГГ:ММ:СС+ГГ:ХМ[:СС[.ffffff]]
, якщоmicrosecond
дорівнює 0
Приклади:
>>> from datetime import datetime, timezone >>> datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat() '2019-05-18T15:17:08.132263' >>> datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat() '2019-05-18T15:17:00+00:00'
Необов’язковий аргумент sep (за замовчуванням
'T'
) є односимвольним роздільником, який розміщується між частинами дати та часу результату. Наприклад:>>> from datetime import tzinfo, timedelta, datetime >>> class TZ(tzinfo): ... """A time zone with an arbitrary, constant -06:39 offset.""" ... def utcoffset(self, dt): ... return timedelta(hours=-6, minutes=-39) ... >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ') '2002-12-25 00:00:00-06:39' >>> datetime(2009, 11, 27, microsecond=100, tzinfo=TZ()).isoformat() '2009-11-27T00:00:00.000100-06:39'
Необов’язковий аргумент timespec визначає кількість додаткових компонентів часу, які потрібно включити (за замовчуванням це
'auto'
). Це може бути одне з наступного:'auto'
: те саме, що'seconds'
, якщоmicrosecond
дорівнює 0, те ж саме, що'microseconds'
інакше.'hours'
: Додайтеhour
у двозначному форматіHH
.'seconds'
: включайтеhour
,minute
іsecond
у форматіHH:MM:SS
.'мілісекунди
: включити повний час, але скоротити дробову другу частину до мілісекунд. ФорматHH:MM:SS.sss
.'мікросекунди
: включіть повний час у форматіГГ:ХХ:СС.ffffff
.
Примітка
Виключені компоненти часу скорочуються, а не округлюються.
ValueError
буде викликано через недійсний аргумент timespec:>>> from datetime import datetime >>> datetime.now().isoformat(timespec='minutes') '2002-12-25T00:00' >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0) >>> dt.isoformat(timespec='microseconds') '2015-01-01T12:30:59.000000'
Нове в версії 3.6: Added the timespec argument.
-
datetime.
ctime
()¶ Повертає рядок, що представляє дату й час:
>>> from datetime import datetime >>> datetime(2002, 12, 4, 20, 30, 40).ctime() 'Wed Dec 4 20:30:40 2002'
Рядок виводу не включатиме інформацію про часовий пояс, незалежно від того, чи є введення відомим чи простим.
d.ctime()
еквівалентний:time.ctime(time.mktime(d.timetuple()))
на платформах, де рідна функція C
ctime()
(якуtime.ctime()
викликає, але якуdatetime.ctime()
не викликає) відповідає стандарту C.
-
datetime.
strftime
(format)¶ Return a string representing the date and time, controlled by an explicit format string. For a complete list of formatting directives, see strftime() and strptime() Behavior.
-
datetime.
__format__
(format)¶ Same as
datetime.strftime()
. This makes it possible to specify a format string for adatetime
object in formatted string literals and when usingstr.format()
. For a complete list of formatting directives, see strftime() and strptime() Behavior.
Приклади використання: datetime
¶
Examples of working with datetime
objects:
>>> from datetime import datetime, date, time, timezone
>>> # Using datetime.combine()
>>> d = date(2005, 7, 14)
>>> t = time(12, 30)
>>> datetime.combine(d, t)
datetime.datetime(2005, 7, 14, 12, 30)
>>> # Using datetime.now()
>>> datetime.now()
datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
>>> datetime.now(timezone.utc)
datetime.datetime(2007, 12, 6, 15, 29, 43, 79060, tzinfo=datetime.timezone.utc)
>>> # Using datetime.strptime()
>>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
>>> dt
datetime.datetime(2006, 11, 21, 16, 30)
>>> # Using datetime.timetuple() to get tuple of all attributes
>>> tt = dt.timetuple()
>>> for it in tt:
... print(it)
...
2006 # year
11 # month
21 # day
16 # hour
30 # minute
0 # second
1 # weekday (0 = Monday)
325 # number of days since 1st January
-1 # dst - method tzinfo.dst() returned None
>>> # Date in ISO format
>>> ic = dt.isocalendar()
>>> for it in ic:
... print(it)
...
2006 # ISO year
47 # ISO week
2 # ISO weekday
>>> # Formatting a datetime
>>> dt.strftime("%A, %d. %B %Y %I:%M%p")
'Tuesday, 21. November 2006 04:30PM'
>>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
'The day is 21, the month is November, the time is 04:30PM.'
У наведеному нижче прикладі визначено підклас tzinfo
, який збирає інформацію про часовий пояс для Кабула, Афганістан, який використовував +4 UTC до 1945 року, а потім +4:30 UTC після цього:
from datetime import timedelta, datetime, tzinfo, timezone
class KabulTz(tzinfo):
# Kabul used +4 until 1945, when they moved to +4:30
UTC_MOVE_DATE = datetime(1944, 12, 31, 20, tzinfo=timezone.utc)
def utcoffset(self, dt):
if dt.year < 1945:
return timedelta(hours=4)
elif (1945, 1, 1, 0, 0) <= dt.timetuple()[:5] < (1945, 1, 1, 0, 30):
# An ambiguous ("imaginary") half-hour range representing
# a 'fold' in time due to the shift from +4 to +4:30.
# If dt falls in the imaginary range, use fold to decide how
# to resolve. See PEP495.
return timedelta(hours=4, minutes=(30 if dt.fold else 0))
else:
return timedelta(hours=4, minutes=30)
def fromutc(self, dt):
# Follow same validations as in datetime.tzinfo
if not isinstance(dt, datetime):
raise TypeError("fromutc() requires a datetime argument")
if dt.tzinfo is not self:
raise ValueError("dt.tzinfo is not self")
# A custom implementation is required for fromutc as
# the input to this function is a datetime with utc values
# but with a tzinfo set to self.
# See datetime.astimezone or fromtimestamp.
if dt.replace(tzinfo=timezone.utc) >= self.UTC_MOVE_DATE:
return dt + timedelta(hours=4, minutes=30)
else:
return dt + timedelta(hours=4)
def dst(self, dt):
# Kabul does not observe daylight saving time.
return timedelta(0)
def tzname(self, dt):
if dt >= self.UTC_MOVE_DATE:
return "+04:30"
return "+04"
Використання KabulTz
зверху:
>>> tz1 = KabulTz()
>>> # Datetime before the change
>>> dt1 = datetime(1900, 11, 21, 16, 30, tzinfo=tz1)
>>> print(dt1.utcoffset())
4:00:00
>>> # Datetime after the change
>>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=tz1)
>>> print(dt2.utcoffset())
4:30:00
>>> # Convert datetime to another time zone
>>> dt3 = dt2.astimezone(timezone.utc)
>>> dt3
datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc)
>>> dt2
datetime.datetime(2006, 6, 14, 13, 0, tzinfo=KabulTz())
>>> dt2 == dt3
True
time
Об’єкти¶
A time
object represents a (local) time of day, independent of any particular
day, and subject to adjustment via a tzinfo
object.
-
class
datetime.
time
(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)¶ Усі аргументи необов’язкові. tzinfo може бути
None
або екземпляром підкласуtzinfo
. Решта аргументів мають бути цілими числами в таких діапазонах:0 <= година < 24
,0 <= хвилина < 60
,0 <= секунда < 60
,0 <= мікросекунда < 1000000
,згорнути [0, 1]
.
If an argument outside those ranges is given,
ValueError
is raised. All default to0
except tzinfo, which defaults toNone
.
Атрибути класу:
-
time.
resolution
¶ Найменша можлива різниця між нерівними об’єктами
time
,timedelta(microseconds=1)
, хоча зауважте, що арифметика в об’єктахtime
не підтримується.
Атрибути екземпляра (тільки для читання):
-
time.
hour
¶ У діапазоні (24).
-
time.
minute
¶ У
діапазоні (60)
.
-
time.
second
¶ У
діапазоні (60)
.
-
time.
microsecond
¶ У
діапазоні (1000 000)
.
-
time.
tzinfo
¶ Об’єкт, переданий як аргумент tzinfo конструктору
time
, абоNone
, якщо жодного не було передано.
-
time.
fold
¶ In
[0, 1]
. Used to disambiguate wall times during a repeated interval. (A repeated interval occurs when clocks are rolled back at the end of daylight saving time or when the UTC offset for the current zone is decreased for political reasons.) The value 0 (1) represents the earlier (later) of the two moments with the same wall time representation.Нове в версії 3.6.
time
objects support comparison of time
to time
,
where a is considered less
than b when a precedes b in time. If one comparand is naive and the other
is aware, TypeError
is raised if an order comparison is attempted. For equality
comparisons, naive instances are never equal to aware instances.
If both comparands are aware, and have
the same tzinfo
attribute, the common tzinfo
attribute is
ignored and the base times are compared. If both comparands are aware and
have different tzinfo
attributes, the comparands are first adjusted by
subtracting their UTC offsets (obtained from self.utcoffset()
). In order
to stop mixed-type comparisons from falling back to the default comparison by
object address, when a time
object is compared to an object of a
different type, TypeError
is raised unless the comparison is ==
or
!=
. The latter cases return False
or True
, respectively.
Змінено в версії 3.3: Equality comparisons between aware and naive time
instances
don’t raise TypeError
.
У логічних контекстах об’єкт time
завжди вважається істинним.
Змінено в версії 3.5: До Python 3.5 об’єкт time
вважався хибним, якщо він представляв північ за UTC. Така поведінка вважалася незрозумілою та спроможною до помилок, і її було видалено в Python 3.5. Дивіться bpo-13936 для отримання повної інформації.
Інший конструктор:
-
classmethod
time.
fromisoformat
(time_string)¶ Return a
time
corresponding to a time_string in one of the formats emitted bytime.isoformat()
. Specifically, this function supports strings in the format:HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]
Застереження
This does not support parsing arbitrary ISO 8601 strings. It is only intended as the inverse operation of
time.isoformat()
.Приклади:
>>> from datetime import time >>> time.fromisoformat('04:23:01') datetime.time(4, 23, 1) >>> time.fromisoformat('04:23:01.000384') datetime.time(4, 23, 1, 384) >>> time.fromisoformat('04:23:01+04:00') datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
Нове в версії 3.7.
Методи екземплярів:
-
time.
replace
(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)¶ Повертає
time
з тим самим значенням, за винятком тих атрибутів, яким надано нові значення за будь-якими аргументами ключового слова. Зауважте, щоtzinfo=None
можна вказати для створення простогоtime
із відомогоtime
без перетворення даних часу.Нове в версії 3.6: Added the
fold
argument.
-
time.
isoformat
(timespec='auto')¶ Повертає рядок, що представляє час у форматі ISO 8601, один із:
HH:MM:SS.ffffff
, якщоmicrosecond
не дорівнює 0ГГ:ХХ:СС
, якщоmicrosecond
дорівнює 0HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]
, якщоutcoffset()
не повертаєNone
ГГ:ХМ:СС+ГГ:ХМ[:СС[.ffffff]]
, якщоmicrosecond
дорівнює 0 іutcoffset()
не повертаєNone
Необов’язковий аргумент timespec визначає кількість додаткових компонентів часу, які потрібно включити (за замовчуванням це
'auto'
). Це може бути одне з наступного:'auto'
: те саме, що'seconds'
, якщоmicrosecond
дорівнює 0, те ж саме, що'microseconds'
інакше.'hours'
: Додайтеhour
у двозначному форматіHH
.'seconds'
: включайтеhour
,minute
іsecond
у форматіHH:MM:SS
.'мілісекунди
: включити повний час, але скоротити дробову другу частину до мілісекунд. ФорматHH:MM:SS.sss
.'мікросекунди
: включіть повний час у форматіГГ:ХХ:СС.ffffff
.
Примітка
Виключені компоненти часу скорочуються, а не округлюються.
ValueError
буде викликано через недійсний аргумент timespec.Приклад:
>>> from datetime import time >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes') '12:34' >>> dt = time(hour=12, minute=34, second=56, microsecond=0) >>> dt.isoformat(timespec='microseconds') '12:34:56.000000' >>> dt.isoformat(timespec='auto') '12:34:56'
Нове в версії 3.6: Added the timespec argument.
-
time.
__str__
()¶ Протягом часу t
str(t)
еквівалентноt.isoformat()
.
-
time.
strftime
(format)¶ Return a string representing the time, controlled by an explicit format string. For a complete list of formatting directives, see strftime() and strptime() Behavior.
-
time.
__format__
(format)¶ Same as
time.strftime()
. This makes it possible to specify a format string for atime
object in formatted string literals and when usingstr.format()
. For a complete list of formatting directives, see strftime() and strptime() Behavior.
-
time.
utcoffset
()¶ Якщо
tzinfo
має значенняNone
, повертаєNone
, інакше повертаєself.tzinfo.utcoffset(None)
і викликає виняток, якщо останній не повертаєNone
або об’єктtimedelta
з величиною менше одного дня.Змінено в версії 3.7: Зсув UTC не обмежений цілою кількістю хвилин.
-
time.
dst
()¶ Якщо
tzinfo
має значенняNone
, повертаєNone
, інакше повертаєself.tzinfo.dst(None)
і викликає виняток, якщо останній не повертаєNone
або об’єктtimedelta
з величиною менше одного дня.Змінено в версії 3.7: Зміщення літнього часу не обмежується цілою кількістю хвилин.
-
time.
tzname
()¶ Якщо
tzinfo
має значенняNone
, повертаєNone
, інакше повертаєself.tzinfo.tzname(None)
або викликає виняток, якщо останній не повертаєNone
або рядковий об’єкт.
Приклади використання: time
¶
Приклади роботи з об’єктом time
:
>>> from datetime import time, tzinfo, timedelta
>>> class TZ1(tzinfo):
... def utcoffset(self, dt):
... return timedelta(hours=1)
... def dst(self, dt):
... return timedelta(0)
... def tzname(self,dt):
... return "+01:00"
... def __repr__(self):
... return f"{self.__class__.__name__}()"
...
>>> t = time(12, 10, 30, tzinfo=TZ1())
>>> t
datetime.time(12, 10, 30, tzinfo=TZ1())
>>> t.isoformat()
'12:10:30+01:00'
>>> t.dst()
datetime.timedelta(0)
>>> t.tzname()
'+01:00'
>>> t.strftime("%H:%M:%S %Z")
'12:10:30 +01:00'
>>> 'The {} is {:%H:%M}.'.format("time", t)
'The time is 12:10.'
tzinfo
Об’єкти¶
-
class
datetime.
tzinfo
¶ Це абстрактний базовий клас, що означає, що цей клас не повинен створюватися безпосередньо. Визначте підклас
tzinfo
для отримання інформації про певний часовий пояс.Екземпляр (конкретного підкласу)
tzinfo
можна передати конструкторам для об’єктівdatetime
іtime
. Останні об’єкти розглядають свої атрибути як місцевий час, а об’єктtzinfo
підтримує методи, які виявляють зміщення місцевого часу від UTC, назви часового поясу та зміщення літнього часу, усе відносно об’єкта дати чи часу передано їм.You need to derive a concrete subclass, and (at least) supply implementations of the standard
tzinfo
methods needed by thedatetime
methods you use. Thedatetime
module providestimezone
, a simple concrete subclass oftzinfo
which can represent timezones with fixed offset from UTC such as UTC itself or North American EST and EDT.Special requirement for pickling: A
tzinfo
subclass must have an__init__()
method that can be called with no arguments, otherwise it can be pickled but possibly not unpickled again. This is a technical requirement that may be relaxed in the future.A concrete subclass of
tzinfo
may need to implement the following methods. Exactly which methods are needed depends on the uses made of awaredatetime
objects. If in doubt, simply implement all of them.
-
tzinfo.
utcoffset
(dt)¶ Повертає зміщення місцевого часу від UTC, як об’єкт
timedelta
, який є позитивним на схід від UTC. Якщо місцевий час на захід від UTC, це значення має бути від’ємним.Це загальне зміщення від UTC; наприклад, якщо об’єкт
tzinfo
представляє коригування часового поясу та літнього часу,utcoffset()
має повернути їх суму. Якщо зсув UTC невідомий, повернітьNone
. Інакше повернене значення має бути об’єктомtimedelta
строго між-timedelta(hours=24)
іtimedelta(hours=24)
(величина зміщення має бути меншою за один день ). Більшість реалізаційutcoffset()
, ймовірно, виглядатимуть як одне з цих двох:return CONSTANT # fixed-offset class return CONSTANT + self.dst(dt) # daylight-aware class
Якщо
utcoffset()
не повертаєNone
,dst()
також не має повертатиNone
.Стандартна реалізація
utcoffset()
викликаєNotImplementedError
.Змінено в версії 3.7: Зсув UTC не обмежений цілою кількістю хвилин.
-
tzinfo.
dst
(dt)¶ Повертає коригування літнього часу (DST) як об’єкт
timedelta
абоNone
, якщо інформація про літній час невідома.Return
timedelta(0)
if DST is not in effect. If DST is in effect, return the offset as atimedelta
object (seeutcoffset()
for details). Note that DST offset, if applicable, has already been added to the UTC offset returned byutcoffset()
, so there’s no need to consultdst()
unless you’re interested in obtaining DST info separately. For example,datetime.timetuple()
calls itstzinfo
attribute’sdst()
method to determine how thetm_isdst
flag should be set, andtzinfo.fromutc()
callsdst()
to account for DST changes when crossing time zones.Екземпляр tz підкласу
tzinfo
, який моделює як стандартний, так і денний час, має бути послідовним у цьому сенсі:tz.utcoffset(dt) - tz.dst(dt)
must return the same result for every
datetime
dt withdt.tzinfo == tz
For sanetzinfo
subclasses, this expression yields the time zone’s «standard offset», which should not depend on the date or the time, but only on geographic location. The implementation ofdatetime.astimezone()
relies on this, but cannot detect violations; it’s the programmer’s responsibility to ensure it. If atzinfo
subclass cannot guarantee this, it may be able to override the default implementation oftzinfo.fromutc()
to work correctly withastimezone()
regardless.Більшість реалізацій
dst()
, ймовірно, виглядатимуть як одна з цих двох:def dst(self, dt): # a fixed-offset class: doesn't account for DST return timedelta(0)
або:
def dst(self, dt): # Code to set dston and dstoff to the time zone's DST # transition times based on the input dt.year, and expressed # in standard local time. if dston <= dt.replace(tzinfo=None) < dstoff: return timedelta(hours=1) else: return timedelta(0)
Стандартна реалізація
dst()
викликаєNotImplementedError
.Змінено в версії 3.7: Зміщення літнього часу не обмежується цілою кількістю хвилин.
-
tzinfo.
tzname
(dt)¶ Return the time zone name corresponding to the
datetime
object dt, as a string. Nothing about string names is defined by thedatetime
module, and there’s no requirement that it mean anything in particular. For example, «GMT», «UTC», «-500», «-5:00», «EDT», «US/Eastern», «America/New York» are all valid replies. ReturnNone
if a string name isn’t known. Note that this is a method rather than a fixed string primarily because sometzinfo
subclasses will wish to return different names depending on the specific value of dt passed, especially if thetzinfo
class is accounting for daylight time.Стандартна реалізація
tzname()
викликаєNotImplementedError
.
Ці методи викликаються об’єктом datetime
або time
у відповідь на їх однойменні методи. Об’єкт datetime
передає себе як аргумент, а об’єкт time
передає None
як аргумент. Таким чином, методи підкласу tzinfo
повинні бути готові прийняти аргумент dt None
або клас datetime
.
Коли передається None
, розробник класу вирішує найкращу відповідь. Наприклад, повернення None
є доцільним, якщо клас хоче сказати, що об’єкти часу не беруть участі в протоколах tzinfo
. Може бути кориснішим для utcoffset(None)
повертати стандартне зміщення UTC, оскільки немає іншої угоди для виявлення стандартного зсуву.
When a datetime
object is passed in response to a datetime
method, dt.tzinfo
is the same object as self. tzinfo
methods can
rely on this, unless user code calls tzinfo
methods directly. The
intent is that the tzinfo
methods interpret dt as being in local
time, and not need worry about objects in other timezones.
Є ще один метод tzinfo
, який підклас може захотіти перевизначити:
-
tzinfo.
fromutc
(dt)¶ This is called from the default
datetime.astimezone()
implementation. When called from that,dt.tzinfo
is self, and dt’s date and time data are to be viewed as expressing a UTC time. The purpose offromutc()
is to adjust the date and time data, returning an equivalent datetime in self’s local time.Most
tzinfo
subclasses should be able to inherit the defaultfromutc()
implementation without problems. It’s strong enough to handle fixed-offset time zones, and time zones accounting for both standard and daylight time, and the latter even if the DST transition times differ in different years. An example of a time zone the defaultfromutc()
implementation may not handle correctly in all cases is one where the standard offset (from UTC) depends on the specific date and time passed, which can happen for political reasons. The default implementations ofastimezone()
andfromutc()
may not produce the result you want if the result is one of the hours straddling the moment the standard offset changes.Пропускаючи код для випадків помилки, реалізація за замовчуванням
fromutc()
діє як:def fromutc(self, dt): # raise ValueError error if dt.tzinfo is not self dtoff = dt.utcoffset() dtdst = dt.dst() # raise ValueError if dtoff is None or dtdst is None delta = dtoff - dtdst # this is self's standard offset if delta: dt += delta # convert to standard local time dtdst = dt.dst() # raise ValueError if dtdst is None if dtdst: return dt + dtdst else: return dt
У наступному файлі tzinfo_examples.py
є кілька прикладів класів tzinfo
:
from datetime import tzinfo, timedelta, datetime
ZERO = timedelta(0)
HOUR = timedelta(hours=1)
SECOND = timedelta(seconds=1)
# A class capturing the platform's idea of local time.
# (May result in wrong values on historical times in
# timezones where UTC offset and/or the DST rules had
# changed in the past.)
import time as _time
STDOFFSET = timedelta(seconds = -_time.timezone)
if _time.daylight:
DSTOFFSET = timedelta(seconds = -_time.altzone)
else:
DSTOFFSET = STDOFFSET
DSTDIFF = DSTOFFSET - STDOFFSET
class LocalTimezone(tzinfo):
def fromutc(self, dt):
assert dt.tzinfo is self
stamp = (dt - datetime(1970, 1, 1, tzinfo=self)) // SECOND
args = _time.localtime(stamp)[:6]
dst_diff = DSTDIFF // SECOND
# Detect fold
fold = (args == _time.localtime(stamp - dst_diff))
return datetime(*args, microsecond=dt.microsecond,
tzinfo=self, fold=fold)
def utcoffset(self, dt):
if self._isdst(dt):
return DSTOFFSET
else:
return STDOFFSET
def dst(self, dt):
if self._isdst(dt):
return DSTDIFF
else:
return ZERO
def tzname(self, dt):
return _time.tzname[self._isdst(dt)]
def _isdst(self, dt):
tt = (dt.year, dt.month, dt.day,
dt.hour, dt.minute, dt.second,
dt.weekday(), 0, 0)
stamp = _time.mktime(tt)
tt = _time.localtime(stamp)
return tt.tm_isdst > 0
Local = LocalTimezone()
# A complete implementation of current DST rules for major US time zones.
def first_sunday_on_or_after(dt):
days_to_go = 6 - dt.weekday()
if days_to_go:
dt += timedelta(days_to_go)
return dt
# US DST Rules
#
# This is a simplified (i.e., wrong for a few cases) set of rules for US
# DST start and end times. For a complete and up-to-date set of DST rules
# and timezone definitions, visit the Olson Database (or try pytz):
# http://www.twinsun.com/tz/tz-link.htm
# http://sourceforge.net/projects/pytz/ (might not be up-to-date)
#
# In the US, since 2007, DST starts at 2am (standard time) on the second
# Sunday in March, which is the first Sunday on or after Mar 8.
DSTSTART_2007 = datetime(1, 3, 8, 2)
# and ends at 2am (DST time) on the first Sunday of Nov.
DSTEND_2007 = datetime(1, 11, 1, 2)
# From 1987 to 2006, DST used to start at 2am (standard time) on the first
# Sunday in April and to end at 2am (DST time) on the last
# Sunday of October, which is the first Sunday on or after Oct 25.
DSTSTART_1987_2006 = datetime(1, 4, 1, 2)
DSTEND_1987_2006 = datetime(1, 10, 25, 2)
# From 1967 to 1986, DST used to start at 2am (standard time) on the last
# Sunday in April (the one on or after April 24) and to end at 2am (DST time)
# on the last Sunday of October, which is the first Sunday
# on or after Oct 25.
DSTSTART_1967_1986 = datetime(1, 4, 24, 2)
DSTEND_1967_1986 = DSTEND_1987_2006
def us_dst_range(year):
# Find start and end times for US DST. For years before 1967, return
# start = end for no DST.
if 2006 < year:
dststart, dstend = DSTSTART_2007, DSTEND_2007
elif 1986 < year < 2007:
dststart, dstend = DSTSTART_1987_2006, DSTEND_1987_2006
elif 1966 < year < 1987:
dststart, dstend = DSTSTART_1967_1986, DSTEND_1967_1986
else:
return (datetime(year, 1, 1), ) * 2
start = first_sunday_on_or_after(dststart.replace(year=year))
end = first_sunday_on_or_after(dstend.replace(year=year))
return start, end
class USTimeZone(tzinfo):
def __init__(self, hours, reprname, stdname, dstname):
self.stdoffset = timedelta(hours=hours)
self.reprname = reprname
self.stdname = stdname
self.dstname = dstname
def __repr__(self):
return self.reprname
def tzname(self, dt):
if self.dst(dt):
return self.dstname
else:
return self.stdname
def utcoffset(self, dt):
return self.stdoffset + self.dst(dt)
def dst(self, dt):
if dt is None or dt.tzinfo is None:
# An exception may be sensible here, in one or both cases.
# It depends on how you want to treat them. The default
# fromutc() implementation (called by the default astimezone()
# implementation) passes a datetime with dt.tzinfo is self.
return ZERO
assert dt.tzinfo is self
start, end = us_dst_range(dt.year)
# Can't compare naive to aware objects, so strip the timezone from
# dt first.
dt = dt.replace(tzinfo=None)
if start + HOUR <= dt < end - HOUR:
# DST is in effect.
return HOUR
if end - HOUR <= dt < end:
# Fold (an ambiguous hour): use dt.fold to disambiguate.
return ZERO if dt.fold else HOUR
if start <= dt < start + HOUR:
# Gap (a non-existent hour): reverse the fold rule.
return HOUR if dt.fold else ZERO
# DST is off.
return ZERO
def fromutc(self, dt):
assert dt.tzinfo is self
start, end = us_dst_range(dt.year)
start = start.replace(tzinfo=self)
end = end.replace(tzinfo=self)
std_time = dt + self.stdoffset
dst_time = std_time + HOUR
if end <= dst_time < end + HOUR:
# Repeated hour
return std_time.replace(fold=1)
if std_time < start or dst_time >= end:
# Standard time
return std_time
if start <= std_time < end - HOUR:
# Daylight saving time
return dst_time
Eastern = USTimeZone(-5, "Eastern", "EST", "EDT")
Central = USTimeZone(-6, "Central", "CST", "CDT")
Mountain = USTimeZone(-7, "Mountain", "MST", "MDT")
Pacific = USTimeZone(-8, "Pacific", "PST", "PDT")
Зауважте, що є неминучі тонкощі двічі на рік у підкласі tzinfo
, що враховує як стандартний, так і денний час, у точках переходу на літній час. Для конкретності розглянемо Східну США (UTC -0500), де EDT починається через хвилину після 1:59 (EST) у другу неділю березня та закінчується через хвилину після 1:59 (EST) у першу неділю листопада:
UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
Коли починається літній час (рядок «початок»), місцевий настінний годинник переходить з 1:59 на 3:00. Настінний час у формі 2:MM насправді не має сенсу в цей день, тому astimezone(Eastern)
не надасть результат з hour == 2
у день початку літнього часу. Наприклад, під час весняного переходу вперед 2016 року ми отримуємо:
>>> from datetime import datetime, timezone
>>> from tzinfo_examples import HOUR, Eastern
>>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
>>> for i in range(4):
... u = u0 + i*HOUR
... t = u.astimezone(Eastern)
... print(u.time(), 'UTC =', t.time(), t.tzname())
...
05:00:00 UTC = 00:00:00 EST
06:00:00 UTC = 01:00:00 EST
07:00:00 UTC = 03:00:00 EDT
08:00:00 UTC = 04:00:00 EDT
When DST ends (the «end» line), there’s a potentially worse problem: there’s an
hour that can’t be spelled unambiguously in local wall time: the last hour of
daylight time. In Eastern, that’s times of the form 5:MM UTC on the day
daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
astimezone()
mimics the local clock’s behavior by mapping two adjacent UTC
hours into the same local hour then. In the Eastern example, UTC times of the
form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times
have the fold
attribute set to 0 and the later times have it set to 1.
For example, at the Fall back transition of 2016, we get:
>>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
>>> for i in range(4):
... u = u0 + i*HOUR
... t = u.astimezone(Eastern)
... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
...
04:00:00 UTC = 00:00:00 EDT 0
05:00:00 UTC = 01:00:00 EDT 0
06:00:00 UTC = 01:00:00 EST 1
07:00:00 UTC = 02:00:00 EST 0
Note that the datetime
instances that differ only by the value of the
fold
attribute are considered equal in comparisons.
Applications that can’t bear wall-time ambiguities should explicitly check the
value of the fold
attribute or avoid using hybrid
tzinfo
subclasses; there are no ambiguities when using timezone
,
or any other fixed-offset tzinfo
subclass (such as a class representing
only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
Дивись також
zoneinfo
The
datetime
module has a basictimezone
class (for handling arbitrary fixed offsets from UTC) and itstimezone.utc
attribute (a UTC timezone instance).
zoneinfo
brings the IANA timezone database (also known as the Olson database) to Python, and its usage is recommended.
- IANA timezone database
База даних часових поясів (часто називається tz, tzdata або zoneinfo) містить код і дані, які представляють історію місцевого часу для багатьох репрезентативних місць у всьому світі. Він періодично оновлюється, щоб відобразити зміни, внесені політичними органами в межі часових поясів, зміщення UTC і правила переходу на літній час.
timezone
Об’єкти¶
The timezone
class is a subclass of tzinfo
, each
instance of which represents a timezone defined by a fixed offset from
UTC.
Objects of this class cannot be used to represent timezone information in the locations where different offsets are used in different days of the year or where historical changes have been made to civil time.
-
class
datetime.
timezone
(offset, name=None)¶ Аргумент offset має бути вказаний як об’єкт
timedelta
, що представляє різницю між місцевим часом і UTC. Воно має бути між-timedelta(hours=24)
іtimedelta(hours=24)
, інакшеValueError
викликається.Аргумент name необов’язковий. Якщо вказано, це має бути рядок, який використовуватиметься як значення, яке повертає метод
datetime.tzname()
.Нове в версії 3.2.
Змінено в версії 3.7: Зсув UTC не обмежений цілою кількістю хвилин.
-
timezone.
utcoffset
(dt)¶ Повертає фіксоване значення, указане під час створення екземпляра
timezone
.Аргумент dt ігнорується. Повернене значення є екземпляром
timedelta
, що дорівнює різниці між місцевим часом і UTC.Змінено в версії 3.7: Зсув UTC не обмежений цілою кількістю хвилин.
-
timezone.
tzname
(dt)¶ Повертає фіксоване значення, указане під час створення екземпляра
timezone
.Якщо name не вказано в конструкторі, ім’я, яке повертає
tzname(dt)
, генерується зі значенняoffset
наступним чином. Якщо offset дорівнюєtimedelta(0)
, ім’я - «UTC», інакше це рядок у форматіUTC±HH:MM
, де ± є знакомoffset
, HH і MM – це дві цифриoffset.hours
іoffset.minutes
відповідно.Змінено в версії 3.6: Name generated from
offset=timedelta(0)
is now plain „UTC“, not'UTC+00:00'
.
-
timezone.
dst
(dt)¶ Завжди повертає
None
.
-
timezone.
fromutc
(dt)¶ Повернути
dt + offset
. Аргумент dt має бути відомим екземпляромdatetime
із значеннямtzinfo
значенняself
.
Атрибути класу:
-
timezone.
utc
¶ The UTC timezone,
timezone(timedelta(0))
.
strftime()
and strptime()
Behavior¶
Об’єкти date
, datetime
і time
підтримують метод strftime(format)
для створення рядка, що представляє час під контролем явного рядок форматування.
І навпаки, метод класу datetime.strptime()
створює об’єкт datetime
із рядка, що представляє дату й час, і відповідного рядка формату.
The table below provides a high-level comparison of strftime()
versus strptime()
:
|
|
|
---|---|---|
Використання |
Перетворити об’єкт на рядок відповідно до заданого формату |
Розібрати рядок у об’єкт |
Тип методу |
Метод екземпляра |
Метод класу |
Метод |
||
Підпис |
|
|
strftime()
and strptime()
Format Codes¶
Нижче наведено список усіх кодів форматів, яких вимагає стандарт C 1989 року, і вони працюють на всіх платформах зі стандартною реалізацією C.
Директива |
Значення |
приклад |
Примітки |
---|---|---|---|
|
День тижня як скорочена назва локалі. |
Нд, Пн, …, Сб (en_US);
Отже, Пн, …, Сб (de_DE)
|
(1) |
|
День тижня як повна назва локалі. |
неділя, понеділок, …, субота (en_US);
Sonntag, Montag, …,
Samstag (de_DE)
|
(1) |
|
День тижня як десяткове число, де 0 – неділя, а 6 – субота. |
0, 1, …, 6 |
|
|
День місяця як десяткове число з доповненням нуля. |
01, 02, …, 31 |
(9) |
|
Місяць як скорочена назва локалі. |
січ, лютий, …, грудень (en_US);
січ, лютий, …, дек (de_DE)
|
(1) |
|
Місяць як повна назва локалі. |
січень, лютий, …, грудень (en_US);
січень, лютий, …, грудень (de_DE)
|
(1) |
|
Місяць як десяткове число з доповненням нуля. |
01, 02, …, 12 |
(9) |
|
Рік без століття як десяткове число з доповненням нуля. |
00, 01, …, 99 |
(9) |
|
Рік із століттям як десяткове число. |
0001, 0002, …, 2013, 2014, …, 9998, 9999 |
(2) |
|
Година (24-годинний формат) як десяткове число з доповненням нуля. |
00, 01, …, 23 |
(9) |
|
Година (12-годинний годинник) як десяткове число з доповненням нуля. |
01, 02, …, 12 |
(9) |
|
Локальний еквівалент AM або PM. |
AM, PM (en_US);
am, pm (de_DE)
|
(1), (3) |
|
Хвилина як десяткове число з доповненням нуля. |
00, 01, …, 59 |
(9) |
|
Секунда як десяткове число з доповненням нуля. |
00, 01, …, 59 |
(4), (9) |
|
Мікросекунда як десяткове число, доповнене нулями до 6 цифр. |
000000, 000001, …, 999999 |
(5) |
|
Зміщення UTC у формі |
(порожній), +0000, -0400, +1030, +063415, -030712.345216 |
(6) |
|
Назва часового поясу (пустий рядок, якщо об’єкт наївний). |
(пусто), UTC, GMT |
(6) |
|
День року як десяткове число з доповненням нуля. |
001, 002, …, 366 |
(9) |
|
Номер тижня року (неділя як перший день тижня) як десяткове число з доповненням нуля. Усі дні в новому році, що передують першій неділі, вважаються нульовим тижнем. |
00, 01, …, 53 |
(7), (9) |
|
Номер тижня року (понеділок як перший день тижня) як десяткове число з доповненням нуля. Усі дні в новому році, що передують першому понеділку, вважаються нульовим тижнем. |
00, 01, …, 53 |
(7), (9) |
|
Відповідне представлення дати та часу в локалі. |
Tue Aug 16 21:30:00
1988 (en_US);
16 серпня 21:30:00 1988 (de_DE)
|
(1) |
|
Відповідне представлення дати в локалі. |
16.08.88 (немає);
16.08.1988 (en_US);
16.08.1988 (de_DE)
|
(1) |
|
Відповідне представлення часу локалі. |
21:30:00 (en_US);
21:30:00 (de_DE)
|
(1) |
|
Буквальний символ |
% |
Для зручності включено кілька додаткових директив, які не вимагаються стандартом C89. Усі ці параметри відповідають значенням дати ISO 8601.
Директива |
Значення |
приклад |
Примітки |
---|---|---|---|
|
Рік ISO 8601 із століттям, що представляє рік, який містить більшу частину тижня ISO ( |
0001, 0002, …, 2013, 2014, …, 9998, 9999 |
(8) |
|
День тижня ISO 8601 як десяткове число, де 1 означає понеділок. |
1, 2, …, 7 |
|
|
ISO 8601 тиждень як десяткове число з понеділком як першим днем тижня. Тиждень 01 – це тиждень, що містить 4 січня. |
01, 02, …, 53 |
(8), (9) |
These may not be available on all platforms when used with the strftime()
method. The ISO 8601 year and ISO 8601 week directives are not interchangeable
with the year and week number directives above. Calling strptime()
with
incomplete or ambiguous ISO 8601 directives will raise a ValueError
.
The full set of format codes supported varies across platforms, because Python
calls the platform C library’s strftime()
function, and platform
variations are common. To see the full set of format codes supported on your
platform, consult the strftime(3) documentation. There are also
differences between platforms in handling of unsupported format specifiers.
Нове в версії 3.6: Додано %G
, %u
і %V
.
Технічні деталі¶
Broadly speaking, d.strftime(fmt)
acts like the time
module’s
time.strftime(fmt, d.timetuple())
although not all objects support a
timetuple()
method.
For the datetime.strptime()
class method, the default value is
1900-01-01T00:00:00.000
: any components not specified in the format string
will be pulled from the default value. 4
Використання datetime.strptime(date_string, format)
еквівалентно:
datetime(*(time.strptime(date_string, format)[0:6]))
except when the format includes sub-second components or timezone offset
information, which are supported in datetime.strptime
but are discarded by
time.strptime
.
For time
objects, the format codes for year, month, and day should not
be used, as time
objects have no such values. If they’re used anyway,
1900
is substituted for the year, and 1
for the month and day.
For date
objects, the format codes for hours, minutes, seconds, and
microseconds should not be used, as date
objects have no such
values. If they’re used anyway, 0
is substituted for them.
З тієї ж причини обробка рядків формату, що містять кодові точки Юнікоду, які не можуть бути представлені в наборі символів поточної локалі, також залежить від платформи. На деяких платформах такі кодові точки зберігаються недоторканими у виводі, тоді як на інших strftime
може викликати UnicodeError
або замість цього повертати порожній рядок.
Примітки:
Because the format depends on the current locale, care should be taken when making assumptions about the output value. Field orderings will vary (for example, «month/day/year» versus «day/month/year»), and the output may contain Unicode characters encoded using the locale’s default encoding (for example, if the current locale is
ja_JP
, the default encoding could be any one ofeucJP
,SJIS
, orutf-8
; uselocale.getlocale()
to determine the current locale’s encoding).The
strptime()
method can parse years in the full [1, 9999] range, but years < 1000 must be zero-filled to 4-digit width.Змінено в версії 3.2: In previous versions,
strftime()
method was restricted to years >= 1900.Змінено в версії 3.3: In version 3.2,
strftime()
method was restricted to years >= 1000.When used with the
strptime()
method, the%p
directive only affects the output hour field if the%I
directive is used to parse the hour.Unlike the
time
module, thedatetime
module does not support leap seconds.When used with the
strptime()
method, the%f
directive accepts from one to six digits and zero pads on the right.%f
is an extension to the set of format characters in the C standard (but implemented separately in datetime objects, and therefore always available).For a naive object, the
%z
and%Z
format codes are replaced by empty strings.Для обізнаного об’єкта:
%z
utcoffset()
is transformed into a string of the form±HHMM[SS[.ffffff]]
, whereHH
is a 2-digit string giving the number of UTC offset hours,MM
is a 2-digit string giving the number of UTC offset minutes,SS
is a 2-digit string giving the number of UTC offset seconds andffffff
is a 6-digit string giving the number of UTC offset microseconds. Theffffff
part is omitted when the offset is a whole number of seconds and both theffffff
and theSS
part is omitted when the offset is a whole number of minutes. For example, ifutcoffset()
returnstimedelta(hours=-3, minutes=-30)
,%z
is replaced with the string'-0330'
.
Змінено в версії 3.7: Зсув UTC не обмежений цілою кількістю хвилин.
Змінено в версії 3.7: When the
%z
directive is provided to thestrptime()
method, the UTC offsets can have a colon as a separator between hours, minutes and seconds. For example,'+01:00:00'
will be parsed as an offset of one hour. In addition, providing'Z'
is identical to'+00:00'
.%Z
In
strftime()
,%Z
is replaced by an empty string iftzname()
returnsNone
; otherwise%Z
is replaced by the returned value, which must be a string.strptime()
only accepts certain values for%Z
:будь-яке значення в
time.tzname
для локалі вашої машинижорстко закодовані значення
UTC
іGMT
Тому хтось, хто живе в Японії, може мати дійсні значення
JST
,UTC
іGMT
, але, ймовірно, неEST
. Це викличеValueError
для недійсних значень.
When used with the
strptime()
method,%U
and%W
are only used in calculations when the day of the week and the calendar year (%Y
) are specified.Similar to
%U
and%W
,%V
is only used in calculations when the day of the week and the ISO year (%G
) are specified in astrptime()
format string. Also note that%G
and%Y
are not interchangeable.When used with the
strptime()
method, the leading zero is optional for formats%d
,%m
,%H
,%I
,%M
,%S
,%J
,%U
,%W
, and%V
. Format%y
does require a leading zero.
Виноски
- 1
Якщо, тобто, ми ігноруємо ефекти відносності
- 2
Це збігається з визначенням «пролептичного григоріанського» календаря в книзі Дершовіца та Рейнгольда «Календарні розрахунки*», де це базовий календар для всіх обчислень. Перегляньте книгу для алгоритмів перетворення між пролептичними григоріанськими ординалами та багатьма іншими календарними системами.
- 3
See R. H. van Gent’s guide to the mathematics of the ISO 8601 calendar for a good explanation.
- 4
Passing
datetime.strptime('Feb 29', '%b %d')
will fail since1900
is not a leap year.