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, ordatetimeinstances 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 може бути обізнаним або наївним.
A datetime object d is aware if both of the following hold:
d.tzinfoне єNoned.tzinfo.utcoffset(d)не повертаєNone
Otherwise, d is naive.
A time object t is aware if both of the following hold:
t.tzinfoне єNonet.tzinfo.utcoffset(None)не повертаєNone.
Otherwise, t is naive.
Розрізнення між обізнаним і наївним не стосується об’єктів 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 <= мікросекунди < 10000000 <= секунд < 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) |
|
Залишок обчислюється як об’єкт |
|
Computes the quotient and the remainder:
|
|
Повертає об’єкт |
|
equivalent to
|
|
equivalent to +t when |
|
Повертає рядок у формі |
|
Повертає рядкове представлення об’єкта |
Примітки:
Це точно, але може переповнюватись.
Це точно і не може переповнюватися.
Division by 0 raises
ZeroDivisionError.-timedelta.max is not representable as a
timedeltaobject.Рядкові представлення об’єктів
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(microseconds=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 <= рік <= MAXYEAR1 <= місяць <= 121 <= день <= кількість днів у заданому місяці та році
Якщо вказано аргумент поза цими діапазонами, виникає
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.
ValueErroris raised unless1 <= ordinal <= date.max.toordinal(). For any date d,date.fromordinal(d.toordinal()) == d.
-
classmethod
date.fromisoformat(date_string)¶ Return a
datecorresponding 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 < date2if and only ifdate1.toordinal() < date2.toordinal(). Date comparison raisesTypeErrorif the other comparand isn’t also adateobject. However,NotImplementedis 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 adateobject is compared to an object of a different type,TypeErroris raised unless the comparison is==or!=. The latter cases returnFalseorTrue, respectively.
У логічних контекстах усі об’єкти date вважаються істинними.
Методи екземплярів:
-
date.replace(year=self.year, month=self.month, day=self.day)¶ Return a date with the same value, except for those parameters given new values by whichever keyword arguments are specified.
Приклад:
>>> 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() + 1is the day number within the current year starting with1for January 1st.
-
date.toordinal()¶ Return the proleptic Gregorian ordinal of the date, where January 1 of year 1 has ordinal 1. For any
dateobject 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__()¶ For a date d,
str(d)is equivalent tod.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 adateobject 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
foldargument.
Інші конструктори, усі методи класу:
-
classmethod
datetime.today()¶ Return the current local datetime, with
tzinfoNone.Дорівнює:
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 за допомогою
tzinfoNone.Це схоже на
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, зtzinfoNone. (Отриманий об’єкт наївний.)Це може спричинити помилку
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
datetimeobject whose date components are equal to the givendateobject’s, and whose time components are equal to the giventimeobject’s. If the tzinfo argument is provided, its value is used to set thetzinfoattribute of the result, otherwise thetzinfoattribute of the time argument is used.For any
datetimeobject d,d == datetime.combine(d.date(), d.time(), d.tzinfo). If date is adatetimeobject, its time components andtzinfoattributes are ignored.Змінено в версії 3.6: Додано аргумент tzinfo.
-
classmethod
datetime.fromisoformat(date_string)¶ Return a
datetimecorresponding 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.isoparseis 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]))
ValueErroris 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 sametzinfoattribute as the input datetime, and datetime2 - datetime1 == timedelta after.OverflowErroris raised if datetime2.year would be smaller thanMINYEARor 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
tzinfoattribute as the input datetime, and no time zone adjustments are done even if the input is aware.Віднімання
datetimeвідdatetimeвизначається, лише якщо обидва операнди наївні, або якщо обидва знають. Якщо один знає, а інший наївний, виникаєTypeError.If both are naive, or both are aware and have the same
tzinfoattribute, thetzinfoattributes are ignored, and the result is atimedeltaobject t such thatdatetime2 + t == datetime1. No time zone adjustments are done in this case.If both are aware and have different
tzinfoattributes,a-bacts 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,
TypeErroris 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
tzinfoattribute, the commontzinfoattribute is ignored and the base datetimes are compared. If both comparands are aware and have differenttzinfoattributes, 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
TypeErrorif the other comparand isn’t also adatetimeobject. However,NotImplementedis 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 adatetimeobject is compared to an object of a different type,TypeErroris raised unless the comparison is==or!=. The latter cases returnFalseorTrue, 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)¶ Return a datetime with the same attributes, except for those attributes given new values by whichever keyword arguments are specified. Note that
tzinfo=Nonecan be specified to create a naive datetime from an aware datetime with no conversion of date and time data.Нове в версії 3.6: Added the
foldargument.
-
datetime.astimezone(tz=None)¶ Повертає об’єкт
datetimeз новим атрибутомtzinfotz, регулюючи дані дати й часу таким чином, щоб результат був таким самим часом UTC, як self, але в tz місцевий час.If provided, tz must be an instance of a
tzinfosubclass, 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.tzinfoattribute of the converted datetime instance will be set to an instance oftimezonewith the zone name and offset obtained from the OS.If
self.tzinfois 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() + 1is the day number within the current year starting with1for January 1st. Thetm_isdstflag of the result is set according to thedst()method:tzinfoisNoneordst()returnsNone,tm_isdstis set to-1; else ifdst()returns a non-zero value,tm_isdstis set to1; elsetm_isdstis set to0.
-
datetime.utctimetuple()¶ If
datetimeinstance d is naive, this is the same asd.timetuple()except thattm_isdstis 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_timefor the normalized time is returned.tm_isdstis forced to 0. Note that anOverflowErrormay be raised if d.year wasMINYEARorMAXYEARand UTC adjustment spills over a year boundary.Попередження
Because naive
datetimeobjects are treated by manydatetimemethods as local times, it is preferred to use aware datetimes to represent times in UTC; as a result, usingutcfromtimetuplemay give misleading results. If you have a naivedatetimerepresenting 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
datetimeinstances are assumed to represent local time and this method relies on the platform Cmktime()function to perform the conversion. Sincedatetimesupports wider range of values thanmktime()on many platforms, this method may raiseOverflowErrorfor 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
datetimeinstance 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.'milliseconds': включити повний час, але скоротити дробову другу частину до мілісекунд. ФорматHH:MM:SS.sss.'microseconds': включіть повний час у форматіHH:MM:SS.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 adatetimeobject 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,
ValueErroris raised. All default to0except 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
timecorresponding 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)¶ Return a
timewith the same value, except for those attributes given new values by whichever keyword arguments are specified. Note thattzinfo=Nonecan be specified to create a naivetimefrom an awaretime, without conversion of the time data.Нове в версії 3.6: Added the
foldargument.
-
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.'milliseconds': включити повний час, але скоротити дробову другу частину до мілісекунд. ФорматHH:MM:SS.sss.'microseconds': включіть повний час у форматіHH:MM:SS.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__()¶ For a time t,
str(t)is equivalent tot.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 atimeobject 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
tzinfomethods needed by thedatetimemethods you use. Thedatetimemodule providestimezone, a simple concrete subclass oftzinfowhich can represent timezones with fixed offset from UTC such as UTC itself or North American EST and EDT.Special requirement for pickling: A
tzinfosubclass 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
tzinfomay need to implement the following methods. Exactly which methods are needed depends on the uses made of awaredatetimeobjects. 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 atimedeltaobject (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 itstzinfoattribute’sdst()method to determine how thetm_isdstflag 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
datetimedt withdt.tzinfo == tzFor sanetzinfosubclasses, 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 atzinfosubclass 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
datetimeobject dt, as a string. Nothing about string names is defined by thedatetimemodule, 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. ReturnNoneif a string name isn’t known. Note that this is a method rather than a fixed string primarily because sometzinfosubclasses will wish to return different names depending on the specific value of dt passed, especially if thetzinfoclass 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.tzinfois 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
tzinfosubclasses 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)).
Дивись також
zoneinfoThe
datetimemodule has a basictimezoneclass (for handling arbitrary fixed offsets from UTC) and itstimezone.utcattribute (a UTC timezone instance).
zoneinfobrings 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%pdirective only affects the output hour field if the%Idirective is used to parse the hour.Unlike the
timemodule, thedatetimemodule does not support leap seconds.When used with the
strptime()method, the%fdirective accepts from one to six digits and zero pads on the right.%fis 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
%zand%Zformat codes are replaced by empty strings.Для обізнаного об’єкта:
%zutcoffset()is transformed into a string of the form±HHMM[SS[.ffffff]], whereHHis a 2-digit string giving the number of UTC offset hours,MMis a 2-digit string giving the number of UTC offset minutes,SSis a 2-digit string giving the number of UTC offset seconds andffffffis a 6-digit string giving the number of UTC offset microseconds. Theffffffpart is omitted when the offset is a whole number of seconds and both theffffffand theSSpart is omitted when the offset is a whole number of minutes. For example, ifutcoffset()returnstimedelta(hours=-3, minutes=-30),%zis replaced with the string'-0330'.
Змінено в версії 3.7: Зсув UTC не обмежений цілою кількістю хвилин.
Змінено в версії 3.7: When the
%zdirective 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'.%ZIn
strftime(),%Zis replaced by an empty string iftzname()returnsNone; otherwise%Zis 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,%Uand%Ware only used in calculations when the day of the week and the calendar year (%Y) are specified.Similar to
%Uand%W,%Vis only used in calculations when the day of the week and the ISO year (%G) are specified in astrptime()format string. Also note that%Gand%Yare 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%ydoes 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 since1900is not a leap year.