I am trying to write a program that asks for the user to input the date in the format mm/dd/yyyy and convert it. So, if the user input 01/01/2009, the program should display January 01, 2009. This is my program so far. I managed to convert the month, but the other elements have a bracket around them so it displays January [01] [2009].
date=input('Enter a date(mm/dd/yyy)')
replace=date.replace('/',' ')
convert=replace.split()
day=convert[1:2]
year=convert[2:4]
for ch in convert:
if ch[:2]=='01':
print('January ',day,year )
Thank you in advance!
alecxe
455k116 gold badges1061 silver badges1180 bronze badges
asked Mar 30, 2014 at 1:02
3
Don’t reinvent the wheel and use a combination of strptime()
and strftime()
from datetime
module which is a part of python standard library (docs):
>>> from datetime import datetime
>>> date_input = input('Enter a date(mm/dd/yyyy): ')
Enter a date(mm/dd/yyyy): 11/01/2013
>>> date_object = datetime.strptime(date_input, '%m/%d/%Y')
>>> print(date_object.strftime('%B %d, %Y'))
November 01, 2013
answered Mar 30, 2014 at 1:08
alecxealecxe
455k116 gold badges1061 silver badges1180 bronze badges
0
As a suggestion use dateutil
, which infers the format by itself:
>>> from dateutil.parser import parse
>>> parse('01/05/2009').strftime('%B %d, %Y')
'January 05, 2009'
>>> parse('2009-JAN-5').strftime('%B %d, %Y')
'January 05, 2009'
>>> parse('2009.01.05').strftime('%B %d, %Y')
'January 05, 2009'
answered Mar 30, 2014 at 1:15
behzad.nouribehzad.nouri
72.6k18 gold badges123 silver badges121 bronze badges
Split it by the slashes
convert = replace.split('/')
and then create a dictionary of the months:
months = {1:"January",etc...}
and then to display it do:
print months[convert[0]] + day + year
answered Mar 30, 2014 at 1:09
На чтение 3 мин Просмотров 17.4к. Опубликовано 14.03.2021
Сегодня рассмотрим два метода strftime и strptime из стандартной библиотеки datetime в языке программирования Python.
Содержание
- Описание формата strftime
- Использование strftime
- Преобразование даты в strftime
- Отображение миллисекунд
- Описание формата strptime
- Использование метода strptime
- Заключениеы
Описание формата strftime
Кратко говоря, strftime преобразует объект date в строковую дату.
Это выглядит так: dateobject.strftime(format).
«Format» — это желаемый формат строки даты, который хочет получить пользователь. Формат строится с использованием кодов, приведенных ниже:
- %a — будний день сокращенно (Пн, Вт,…)
- %A — будний день полностью (Понедельник, Вторник,…)
- %w — будний день, как десятичное число (1, 2, 3,…)
- %d — день месяца в числах (01, 02, 03,…)
- %b — месяцы сокращенно (Янв, Фев,…)
- %B — название месяцев полностью (Январь, Февраль,…)
- %m — месяцы в числах (01, 02, 03,…)
- %y — года без века (19, 20, 21)
- %Y — года с веком (2019, 2020, 2021)
- %H — 24 часа в сутки (с 00 до 23)
- %I — 12 часов в сутки (с 01 до 12)
- %p — AM и PM (00-12 и 12-00)
- %M — минуты (от 00 до 59)
- %S — секунды (от 00 до 59)
- %f — миллисекунды (6 десятичных чисел)
Использование strftime
Давайте рассмотрим конкретный пример — преобразование текущего времени в строку даты:
import datetime from datetime import datetime now = datetime.now() print(now)
Вывод программы:
2021-03-07 23:24:11.192196
Давайте теперь преобразуем приведенный выше объект datetime в строку datetime:
now.strftime("%Y-%m-%d %H:%M:%S")
Вывод программы:
Если вы хотите напечатать месяц в качестве сокращенного названия, замените %m на %b, как показано ниже:
now.strftime("%Y-%b-%d %H:%M:%S")
Вывод программы:
И ещё один пример:
now.strftime("%Y/%b/%A %H:%M:%S")
Вывод программы:
'2021/Mar/Sunday 23:16:41'
Преобразование даты в strftime
Преобразование даты в строку очень похоже на преобразование datetime в строку.
Рассмотрим пример — преобразование текущего объекта даты в строку даты:
today = datetime.today() print(today)
Вывод программы:
2021-03-07 23:22:15.341074
Давайте преобразуем приведенный выше объект date в строку даты с помощью метода strftime:
today.strftime("%Y-%m-%d %H:%M:%S")
Вывод программы:
Отображение миллисекунд
Чтобы получить строку даты с миллисекундами, используйте код формата %f в конце, как показано ниже:
today = datetime.today() today.strftime("%Y-%m-%d %H:%M:%S.%f")
Вывод программы:
'2021-03-07 23:23:50.851344'
Описание формата strptime
Strptime используется для преобразования строки в объект datetime. Тоесть обратное действие методу strftime. Это выглядит так: strptime(date_string, format).
Разберем пример: strptime(«9/23/20», «%d/%m/%y»). Формат «%d/%m/%y» представляет собой соответствующий формат «9/23/20». Результатом приведенной выше команды будет объект datetime.
Формат строится с использованием заранее определенных кодов. Есть много кодов на выбор. Наиболее важные из них были перечислены ранее (смотрите 1 пункт в содержании).
Использование метода strptime
Преобразуем строку даты в объект datetime:
import datetime datetime.datetime.strptime("09/23/2030 8:28","%m/%d/%Y %H:%M")
Вывод программы:
datetime.datetime(2030, 9, 23, 8, 28)
Заключениеы
На этом всё. Желаю удачи в программировании!
Егор Егоров
Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.
Ссылка на мой github есть в шапке. Залетай.
In different regions of the world, different types of date formats are used and for that reason usually, programming languages provide a number of date formats for the developed to deal with. In Python, it is dealt with by using a liberty called DateTime. It consists of classes and methods that can be used to work with data and time values.
Required library
import datetime
The datetime.time method
Time values can be represented using the time class. The attributes for the time class include the hour, minute, second, and microsecond.
Syntax of datetime.time
time(hour, minute, second, microsecond)
Example 1:
Python3
import
datetime
tm
=
datetime.time(
2
,
25
,
50
,
13
)
print
(tm)
Output
02:25:50.000013
Example 2:
There are ranges for the time attributes i.e for seconds we have the range between 0 to 59 and for nanoseconds, range is between 0 to 999999. If the range exceeds, the compiler shows a ValueError. The instance of time class consists of three instance attributes namely hour, minute, second, and microsecond. These are used to get specific information about the time.
Python3
import
datetime
tm
=
datetime.time(
1
,
50
,
20
,
133257
)
print
(
'Time tm is '
,
tm.hour,
' hours '
,
tm.minute,
' minutes '
,
tm.second,
' seconds and '
,
tm.microsecond,
' microseconds'
)
Output
Time tm is 1 hours 50 minutes 20 seconds and 133257 microseconds
The datetime.date method
The values for the calendar date can be represented via the date class. The date instance consists of attributes for the year, month, and day.
Syntax of datetime.date
date(yyyy, mm, dd)
Example 1:
Python3
import
datetime
date
=
datetime.date(
2018
,
5
,
12
)
print
(
'Date date is '
, date.day,
' day of '
, date.month,
' of the year '
, date.year)
Output
Date date is 12 day of 5 of the year 2018
Example 2:
To get today’s date names a method called today() is used and to get all the information in one object (today’s information) ctime() method is used.
Python3
import
datetime
tday
=
datetime.date.today()
daytoday
=
tday.ctime()
print
(
"The date today is "
, tday)
print
(
"The date info. is "
, daytoday)
Output
The date today is 2020-01-30 The date info. is Thu Jan 30 00:00:00 2020
Convert string to date using DateTime
Conversion from string to date is many times needed while working with imported data sets from a CSV or when we take inputs from website forms. To do this, Python provides a method called strptime().
Syntax: datetime.strptime(string, format)
Parameters:
- string – The input string.
- format – This is of string type. i.e. the directives can be embedded in the format string.
Example:
Python3
from
datetime
import
datetime
print
(datetime.strptime(
'5/5/2019'
,
'%d/%m/%Y'
))
Output
2019-05-05 00:00:00
Convert dates to strings using DateTime
Date and time are different from strings and thus many times it is important to convert the DateTime to string. For this, we use strftime() method.
Syntax of datetime.strftime
Syntax: datetime.strftime(format, t)
Parameters:
- format – This is of string type. i.e. the directives can be embedded in the format string.
- t – the time to be formatted.
Example 1:
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"%b %d %Y %H:%M:%S"
))
Output
May 12 2018 02:25:50
Example 2:
The same example can also be written in a different place by setting up the print() method.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"%H:%M:%S %b %d %Y"
))
Output
02:25:50 May 12 2018
%H, %M and %S displays the hour, minutes and seconds respectively. %b, %d and %Y displays 3 characters of the month, day and year respectively. Other than the above example the frequently used character code List along with its functionality are:
Frequently used character code in DateTime
- %a: Displays three characters of the weekday, e.g. Wed.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"%a"
))
Output
Sat
- %A: Displays name of the weekday, e.g. Wednesday.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"%A"
))
Output
Saturday
- %B: Displays the month, e.g. May.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"%B"
))
Output
May
- %w: Displays the weekday as a number, from 0 to 6, with Sunday being 0.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"%w"
))
Output
6
- %m: Displays month as a number, from 01 to 12.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"%m"
))
Output
5
- %p: Define AM/PM for time.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"%p"
))
Output
PM
- %y: Displays year in two-digit format, i.e “20” in place of “2020”.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"% y"
))
Output
18
- %f: Displays microsecond from 000000 to 999999.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"% f"
))
Output
000013
- %j: Displays number of the day in the year, from 001 to 366.
Python3
import
datetime
x
=
datetime.datetime(
2018
,
5
,
12
,
2
,
25
,
50
,
13
)
print
(x.strftime(
"%f"
))
Output
132
Python поставляется с множеством полезных объектов, которые можно использовать прямо из коробки. Объекты даты являются примерами таких объектов. Типами дат трудно управлять с нуля из-за сложности дат и времени. Однако объекты даты в Python позволяют чрезвычайно легко преобразовывать даты в желаемые строковые форматы.
Форматирование даты в Python – одна из важнейших задач, с которой вы столкнетесь как программист. В разных регионах мира есть разные способы представления даты и времени, поэтому ваша цель как программиста – представить значения даты в удобном для чтения виде.
Например, вам может потребоваться представить значение даты в числовом формате, например «02-23-2018». С другой стороны, вам может потребоваться записать то же значение даты в более длинном текстовом формате, например «23 февраля 2018 г.». В другом сценарии вы можете извлечь месяц в строковом формате из числового значения даты.
В этой статье мы изучим различные типы объектов даты, а также их функции.
Модуль datetime
Модуль datetime в Python, как вы, наверное, догадались, содержит методы, которые можно использовать для работы со значениями даты и времени. Чтобы использовать этот модуль, мы сначала импортируем его с помощью оператора импорта следующим образом:
import datetime
Мы можем представить значения времени с помощью класса time. Атрибуты для класса времени включают час, минуту, секунду и микросекунду.
Аргументы для класса времени необязательны. Хотя, если вы не укажете какой-либо аргумент, вы вернетесь к времени 0, что вряд ли будет тем, что вам нужно большую часть времени.
Например, чтобы инициализировать объект времени со значением 1 час, 10 минут, 20 секунд и 13 микросекунд, мы можем выполнить следующую команду:
t = datetime.time(1, 10, 20, 13)
Чтобы посмотреть время, воспользуемся функцией print:
print(t)
Вывод:
01:10:20.000013
Возможно, вам понадобится увидеть только час, минуту, секунду или микросекунду, вот как вы можете это сделать:
print('hour:', t.hour)
Вывод:
hour: 1
Минуты, секунды и микросекунды для указанного выше времени можно получить следующим образом:
print('Minutes:', t.minute) print('Seconds:', t.second) print('Microsecond:', t.microsecond)
Вывод:
Minutes: 10 Seconds: 20 Microseconds: 13
Значения календарной даты могут быть представлены через класс date. У экземпляров будут атрибуты года, месяца и дня.
Давайте вызовем метод today, чтобы увидеть сегодняшнюю дату:
import datetime today = datetime.date.today() print(today)
Вывод:
2018-09-15
Код вернет дату на сегодня, поэтому вывод, который вы увидите, будет зависеть от дня, когда вы запускаете вышеуказанный скрипт.
Теперь вызовем метод ctime, чтобы распечатать дату в другом формате:
print('ctime:', today.ctime())
Вывод:
ctime: Sat Sep 15 00:00:00 2018
Метод ctime использует более длинный формат даты и времени, чем в примерах, которые мы видели ранее. Этот метод в основном используется для преобразования времени Unix (количество секунд с 1 января 1970 г.) в строковый формат.
А вот как мы можем отобразить год, месяц и день, используя класс date:
print('Year:', today.year) print('Month:', today.month) print('Day :', today.day)
Вывод:
Year: 2018 Month: 9 Day : 15
Преобразование дат в строки с помощью strftime
Теперь, когда вы знаете, как создавать объекты даты и времени, давайте научимся форматировать их в более удобочитаемые строки.
Для этого мы будем использовать метод strftime. Этот метод помогает нам преобразовывать объекты даты в читаемые строки. Он принимает два параметра, как показано в следующем синтаксисе:
time.strftime(format, t)
Первый параметр – это строка формата, а второй параметр – время форматирования, что не является обязательным.
Этот метод также можно использовать напрямую с объектом datetime, как показано в следующем примере:
import datetime x = datetime.datetime(2018, 9, 15) print(x.strftime("%b %d %Y %H:%M:%S"))
Вывод:
Sep 15 2018 00:00:00
Для форматирования даты мы использовали следующие символьные строки:
- % b: возвращает первые три символа названия месяца. В нашем примере он вернул «Sep».
- % d: возвращает день месяца от 1 до 31. В нашем примере он вернул «15».
- % Y: возвращает год в четырехзначном формате. В нашем примере он вернул «2018».
- % H: возвращает час. В нашем примере он вернул «00».
- % M: возвращает минуты от 00 до 59. В нашем примере возвращается «00».
- % S: возвращает вторую, от 00 до 59. В нашем примере она вернула «00».
Мы не пропустили время, поэтому все значения времени равны «00». В следующем примере показано, как можно форматировать время:
import datetime x = datetime.datetime(2018, 9, 15, 12, 45, 35) print(x.strftime("%b %d %Y %H:%M:%S"))
Вывод:
Sep 15 2018 12:45:35
Полный список кодов символов
Помимо символьных строк, приведенных выше, метод strftime принимает несколько других директив для форматирования значений даты:
- % a: возвращает первые три символа дня недели, например среда.
- % A: возвращает полное название дня недели, например среда.
- % B: возвращает полное название месяца, например, сентябрь.
- % w: возвращает день недели в виде числа от 0 до 6, при этом воскресенье – 0.
- % m: возвращает месяц в виде числа от 01 до 12.
- % p: возвращает AM и PM для времени.
- % y: возвращает год в двузначном формате, то есть без века. Например, «18» вместо «2018».
- % f: возвращает микросекунду от 000000 до 999999.
- % Z: возвращает часовой пояс.
- % z: возвращает смещение по всемирному координированному времени.
- % j: возвращает номер дня в году от 001 до 366.
- % W: возвращает номер недели в году от 00 до 53, при этом понедельник считается первым днем недели.
- % U: возвращает номер недели в году от 00 до 53, при этом воскресенье считается первым днем каждой недели.
- % c: возвращает местную версию даты и времени.
- % x: возвращает локальную версию даты.
- % X: возвращает локальную версию времени.
Рассмотрим следующий пример:
import datetime x = datetime.datetime(2018, 9, 15) print(x.strftime('%b/%d/%Y'))
Вывод:
Sep/15/2018
А вот как получить только месяц:
print(x.strftime('%B'))
Вывод:
September
Покажем год:
print(x.strftime('%Y'))
Вывод:
2018
В этом примере мы использовали код формата% Y. Обратите внимание, что Y находится в верхнем регистре. Теперь напишите это в нижнем регистре:
print(x.strftime('%y'))
Вывод:
18
На этот раз век опущен. Как видите, с помощью этих кодов форматирования вы можете представлять дату и время практически в любой форме.
Преобразование строк в даты
Метод strftime помог нам преобразовать объекты даты в более читаемые строки. Метод делает противоположное, то есть принимает строки и преобразует их в объекты даты, понятные Python.
Вот синтаксис метода:
datetime.strptime(string, format)
Строковый параметр – это значение в строковом формате, которое мы хотим преобразовать в формат даты. Параметр формата – это директива, определяющая формат, который должен быть принят датой после преобразования.
Например, предположим, что нам нужно преобразовать строку «9/15/18» в объект datetime.
Сначала импортируем модуль datetime. Мы будем использовать ключевое слово from, чтобы иметь возможность ссылаться на определенные функции модуля без формата точки:
from datetime import datetime
Затем мы можем определить дату в виде строки:
str = '9/15/18'
Python не сможет понять указанную выше строку как datetime, пока мы не преобразуем ее в фактический объект datetime. Мы можем успешно сделать это, вызвав метод strptime.
Выполните следующую команду, чтобы преобразовать строку:
date_object = datetime.strptime(str, '%m/%d/%y')
Теперь вызовем функцию печати, чтобы отобразить строку в формате datetime:
print(date_object)
Вывод:
2018-09-15 00:00:00
Как видите, конвертация прошла успешно!
Вы можете видеть, что косая черта «/» использовалась для разделения различных элементов строки. Это сообщает методу strptime, в каком формате находится наша дата, в нашем случае “/” используется в качестве разделителя.
Но что, если день/месяц/год были разделены знаком «-»? Вот как вы с этим справитесь:
from datetime import datetime str = '9-15-18' date_object = datetime.strptime(str, '%m-%d-%y') print(date_object)
Вывод:
2018-09-15 00:00:00
И снова, благодаря спецификатору формата, метод strptime смог проанализировать нашу дату и преобразовать ее в объект даты.
Заключение
В этой статье мы изучили, как форматировать даты в Python. Мы увидели, как модуль datetime в Python может использоваться для управления значениями даты и времени. Модуль содержит ряд классов, которые можно использовать для этой цели. Например, класс времени используется для представления значений времени, а класс даты – для представления значений календарной даты.
И наоборот, метод класса datetime.datetime.strptime()
создает объект datetime.datetime()
из строки, представляющей дату и время в строке, соответствующей формату.
Смотрите примеры форматирования объектов модуля datetime
в строки с датой и временем, а так же преобразования из строки в объекты модуля datetime
.
Правила форматирования strftime()
и strptime()
.
Ниже приведен список всех кодов форматирования, которые требуются в стандарте языка C 1989 года, они работают на всех платформах со стандартной реализацией C.
Код | Значение | Пример | Замечания |
%a |
Сокращенное название дня недели в локали по умолчанию. | Sun, Mon, …, Sat (en_US); So, Mo, …, Sa (de_DE) | (1) |
%A |
Полное название дня недели в локали по умолчанию. | Sunday, Monday, …, Saturday (en_US); Sonntag, Montag, …, Samstag (de_DE) | (1) |
%w |
День недели как число, где 0 это Воскресение и 6 — суббота. | 0, 1, …, 6 | |
%d |
День месяца в виде десятичного числа с нулем. | 01, 02, …, 31 | (9) |
%b |
Месяц как сокращенное название в локали по умолчанию. | Jan, Feb, …, Dec (en_US);Jan, Feb, …, Dez (de_DE) | (1) |
%B |
Месяц как полное название в локали по умолчанию. | January, February, …, December (en_US);Januar, Februar, …, Dezember (de_DE) | (1) |
%m |
Месяц в виде десятичного числа с добавлением нуля. | 01, 02, …, 12 | (9) |
%y |
Год без столетия как десятичное число с нулем. | 00, 01, …, 99 | (9) |
%Y |
Год с веком как десятичное число. | 0001, 0002, …, 2013, 2014, …, 9998, 9999 | (2) |
%H |
Час (24-часовой формат) в виде десятичного числа с добавлением нуля. | 00, 01, …, 23 | (9) |
%I |
Час (12-часовые часы) в виде десятичного числа с добавлением нуля. | 01, 02, …, 12 | (9) |
%p |
Локальный эквивалент либо AM, либо PM. | AM, PM (en_US);am, pm (de_DE) | (1), (3) |
%M |
Минута как десятичное число с добавлением нуля. | 00, 01, …, 59 | (9) |
%S |
Секунда как дополненное нулями десятичное число. | 00, 01, …, 59 | (4), (9) |
%f |
Микросекунда как десятичное число, дополненное нулями слева. | 000000, 000001, …, 999999 | (5) |
%z |
Смещение UTC в форме `±HHMM[SS[.ffffff]]` или пустая строка, если объект наивный. | (empty), +0000, -0400, +1030, +063415, -030712.345216 | (6) |
%Z |
Имя часового пояса или пустая строка, если объект наивный. | (empty), UTC, EST, CST | |
%j |
День года в виде десятичного числа с нулем. | 001, 002, …, 366 | (9) |
%U |
Номер недели в году (воскресенье — первый день недели) в виде десятичного числа с добавлением нуля. Все дни в новом году, предшествующем первому воскресенью, считаются на неделе 0. | 00, 01, …, 53 | (7), (9) |
%W |
Номер недели в году (понедельник — первый день недели) в виде десятичного числа. Все дни в новом году, предшествующем первому понедельнику, считаются на неделе 0. | 00, 01,…, 53 | (7), (9) |
%c |
Соответствие локали дате и времени. | Tue Aug 16 21:30:00 1988 (en_US); Di 16 Aug 21:30:00 1988 (de_DE) | (1) |
%x |
Соответствующее представление даты локали. | 08/16/88 (None);08/16/1988 (en_US);16.08.1988 (de_DE) | (1) |
%X |
Соответствующее время локали. | 21:30:00 (en_US);21:30:00 (de_DE) | (1) |
%% |
Буквальный символ ‘%’. | % |
Несколько дополнительных директив, не требуемых стандартом C89, включены для удобства. Все эти параметры соответствуют значениям даты ISO 8601.
Код | Значение | Пример | Замечания |
%G |
ISO 8601 год со столетием, который содержит большую часть недели ISO (%V). | 0001, 0002, …, 2013, 2014, …, 9998, 9999 | (8) |
%u |
ISO 8601 День недели в виде десятичного числа, где 1 — понедельник. | 1, 2, …, 7 | |
%V |
ISO 8601 неделя в виде десятичного числа с понедельником в качестве первого дня недели. Неделя 01 — неделя, содержащая 4 января. | 01, 02, …, 53 | (8), (9) |
Дополнительные директивы могут быть недоступны на всех платформах при использовании с методом .strftime()
. Коды ISO 8601 year
и ISO 8601 week
не являются взаимозаменяемыми с указанными выше директивами о номере года и недели. Вызов strptime()
с неполными или неоднозначными директивами ISO 8601 вызовет исключение ValueError
.
Полный набор поддерживаемых кодов формата варьируется в зависимости от платформы, потому что Python вызывает функцию strftime()
библиотеки языка С. Чтобы увидеть полный набор кодов формата, поддерживаемых на вашей платформе, обратитесь к документации.
Технические детали.
Вообще, метод d.strftime(fmt)
действует как time.strftime()
модуля time
time.strftime(fmt, d.timetuple())
, хотя не все объекты поддерживают метод timetuple()
.
datetime.datetime(*(time.strptime(date_string, format)[0:6]))
За исключением случаев, когда формат включает субсекундные компоненты или информацию о смещении часового пояса, которые поддерживаются в конструкторе datetime.datetime.strptime, но отбрасываются time.strptime.
Для объектов datetime.date()
не следует использовать коды формата для часов, минут, секунд и микросекунд, поскольку объекты даты не имеют таких значений. Если они все равно используются, то они заменяется 0.
По той же причине обработка строк формата, содержащих кодовые точки Unicode, которые не могут быть представлены в кодировке текущей локали, также зависит от платформы. На некоторых платформах такие кодовые точки сохраняются без изменений в выводе, в то время как на других, метод .strftime()
может вызывать исключение UnicodeError
или возвращать пустую строку.
Замечания:
- Поскольку формат зависит от текущей локали, необходимо соблюдать осторожность при предположении о выходном значении. Порядок полей будет различаться, например “month/day/year” или “day/month/year”, а выходные данные могут содержать символы Юникода, закодированные с использованием кодировки по умолчанию для локали (например, если текущим языковым стандартом является ja_JP, Кодировка по умолчанию может быть любой из
eucJP
,SJIS
илиutf-8
. Используйте функциюlocale.getlocale()
для определения кодировки текущей локали. - Метод
.strptime()
может анализировать годы во всем диапазоне[1, 9999]
, но годы< 1000
должны быть заполнены нулями до ширины из 4 цифр. - При использовании с методом
.strptime()
код форматирования%p
влияет только на поле выходного часа, если код форматирования%I
используется для анализа часа. - В отличие от модуля
time
, модульdatetime
не поддерживает високосные секунды. - При использовании с методом
.strptime()
код форматирования%f
принимает от одной до шести цифр и ноль справа. Код%f
является расширением набора символов формата в стандарте C, но реализовано отдельно в объектахdatetime
и поэтому всегда доступно. -
%z
—utcoffset()
преобразуется в строку вида±HHMM[SS[.ffffff]]
, гдеHH
— это двухзначная строка, указывающая количество часов смещения UTC,MM
— двузначная строка, указывающая номер смещения UTC. Минут,SS
— это двузначная строка, указывающая количество секунд смещения UTC, аffffff
— это шестизначная строка, указывающая число микросекунд смещения UTC. Частьffffff
опускается, когда смещение составляет целое число секунд, а частьffffff
иSS
опускается, когда смещение составляет целое число минут. Например, еслиutcoffset()
возвращаетtimedelta(hours=-3, minutes=-30)
, то%z
заменяется строкой'-0330'
.%Z
— Еслиtzname()
возвращаетNone
, то%Z
заменяется пустой строкой. В противном случае%Z
заменяется возвращаемым значением, которое должно быть строкой.
-
При использовании метода
.strptime()
коды%U
и%W
используются только в вычислениях, если указаны день недели и календарный год%Y
. -
Похожий на коды форматирования
%U
и%W
, код%V
используется только в вычислениях, когда день недели и год ISO%G
указываются в строке формата.strptime()
. Также обратите внимание, что коды%G
и%Y
не являются взаимозаменяемыми. -
При использовании с методом
.strptime()
начальный ноль необязателен для форматов%d
,%m
,%H
,%I
,%M
,%S
,%J
,%U
,%W
и%V
. Формат%y
требует начального нуля.
Примеры форматирования строки и преобразования из строки.
- Форматирования
datetime.datetime()
в строку c датой и временем, - Преобразование строки с датой и временем в
datetime.datetime()
. - Преобразование
datetime.datetime()
в строку для базы данных. - Преобразование
datetime.date()
в строку для базы данных. - Преобразование строки из базы данных в
datetime.datetime()
. - Преобразование строки из базы данных в
datetime.date()
.
Форматирования datetime.datetime()
в строку c датой и временем:
>>> import datetime >>> dt = datetime.datetime.now() >>> dt.strftime('%H:%M - %m.%d.%Y года') # '09:56 - 05.06.2020 года' >>> dt.strftime('%H часов %M минут %m.%d.%Y года') # '09 часов 56 минут 05.06.2020 года' >>> dt.strftime('%m/%d/%y') # '05/06/20' >>> dt.strftime('%Y-%m-%d') # '2020-05-06' # форматирование даты при помощи метода str.format() >>> 'День: {0:%d}, Месяц: {0:%B}, время: {0:%H:%M}.'.format(dt) # 'День: 06, Месяц: May, время: 09:56.' # форматирование даты при помощи f-строк f'День: {dt:%d}, Месяц: {dt:%B}, время: {dt:%H:%M}.' # 'День: 06, Месяц: May, время: 09:56.'
Преобразование строки с датой и временем в объект datetime.datetime()
:
>>> import datetime >>> date_str = 'Fri, 24 Apr 2021 16:22:54 +0000' >>> format = '%a, %d %b %Y %H:%M:%S +0000' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2021, 4, 24, 16, 22, 54) >>> date_str = '24.12.2020 16:22' >>> format = '%d.%m.%Y %H:%M' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2020, 12, 24, 16, 22)
Преобразование datetime.datetime()
в строку для базы данных:
>>> import datetime >>> datetime.datetime.now().isoformat() # '2020-12-17T19:53:49.680857'
Преобразование datetime.date()
в строку для базы данных:
>>> import datetime >>> datetime.date.today().isoformat() # '2020-05-05' >>> date = datetime.date(2021, 12, 4).isoformat() >>> date # '2021-12-04'
Преобразование строки из базы данных в datetime.datetime()
:
>>> import datetime >>> line_db = '2011-11-04' >>> datetime.datetime.fromisoformat(line_db) # datetime.datetime(2011, 11, 4, 0, 0) >>> line_db = '2011-11-04T00:05:23' >>> datetime.datetime.fromisoformat(line_db) # datetime.datetime(2011, 11, 4, 0, 5, 23) >>> line_db = '2011-11-04 00:05:23.283' >>> datetime.datetime.fromisoformat(line_db) # datetime.datetime(2011, 11, 4, 0, 5, 23, 283000) >>> line_db = '2011-11-04T00:05:23+04:00' >>> datetime.datetime.fromisoformat(line_db) # datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
Преобразование строки из базы данных в datetime.date()
`:
>>> from datetime import date >>> line_db = '2021-12-06' >>> date.fromisoformat(line_db) # datetime.date(2021, 12, 6)
Для работы с датой и временем в Python 2 и 3 есть отдельный модуль datetime. В отличие от других языков, таких как SQL, в Python нет встроенного типа данных для работы с датой и временем — это достигается путем импорта модуля и созданием объекта. Модуль datetime входит в пакет Python и его не нужно отдельно устанавливать.
Импорт модуля осуществляется следующим путем:
import datetime
Получение текущей даты и времени
Для вывода даты и времени нужно выполнить следующее:
import datetime
day_time = datetime.datetime.now()
print(day_time)
Как видно мы получаем для создания объекта даты и времени используется класс с тем же именем что и модуль datetime.
Когда нужно получить только дату используется класс date:
import datetime
day = datetime.date.today()
print(day)
Получение только времени выполняется через метод time():
import datetime
date_time = datetime.datetime.now().time()
print(date_time, type(date_time))
Каждый из описываемых классов можно импортировать следующим способом:
from datetime import date
from datetime import datetime
print(datetime.now())
print(date.today())
Форматирование и перевод в строку
Для получение части даты или времени можно использовать следующие атрибуты:
- year
- month
- day
- weekday
- hour
- minute
- second
import datetime
# Получение дня от даты
date = datetime.date.today()
print(date.day)
date_time = datetime.datetime.now()
# Получение часа суток от времени
print(date_time.hour)
Так же есть метод strftime, который форматирует даты в нужном формате в строку. Например так мы получим дату в формате, который используется у нас:
import datetime
date = datetime.datetime.today()
print(date.strftime('%d-%m-%Y %H:%M'))
Где:
- %d — день месяца с 1 по 31;
- %m — месяц с 1 по 12;
- %Y — год;
- %H — час в формате 0-24;
- %M — минуты;
- %S — секунды.
Таким же способом можно получить время и дату:
- %c — время и дата;
- %x — дата;
- %X — время.
date = datetime.datetime.today()
print(date.strftime('%x'))
Обратите внимание, что таким способом мы преобразуем объект класса datetime в строку и мы больше не сможем использовать методы по работе с датой (например сравнение):
import datetime
date = datetime.datetime.today()
local_date = date.strftime('%d-%m-%Y %H:%M')
print('Объект класса datetime: ', type(date))
print('Дата преобразованная в строку: ', type(local_date))
print(local_date.day)
Мы получим ошибку так как уже работаем со строкой:
- AttributeError: ‘str’ object has no attribute ‘day’
Выше описаны основные возможности форматирования используя метод strftime(), но их, конечно, больше.
Получения дня недели и название месяца
Можно получить название дня недели или название. Численный вариант эквивалентен следующим значениям:
- 0 — Monday (Понедельник);
- 1 — Tuesday (Вторник);
- 2 — Wednesday (Среда);
- 3 — Thursday (Четверг);
- 4 — Friday (Пятница);
- 5 — Saturday (Суббота);
- 6 — Sunday (Воскресенье).
Следующий пример вернет день недели в виде числа:
date = datetime.datetime.today()
print(date.weekday())
Или получить название:
date = datetime.datetime.today()
print(date.strftime('%A'))
print(date.strftime('%a'))
Где:
- %A — полное название дня недели;
- %a — сокращенное название дня недели;
- %s — представление в виде числа.
Такой же принцип по работе с месяцами, где:
- %B — полное название месяца;
- %b — сокращенное название месяца;
- %m — месяц в виде числа.
Создание объекта даты и времени
Для создания даты используется класс с аргументами date(год, месяц, число):
date = datetime.date(2019, 1, 13)
print(date, type(date))
Можно создать дату и время. В обоих случаях мы можем использовать именованные аргументы если так удобнее:
date_time = datetime.datetime(year = 2019,
month = 2,
day = 4,
hour = 7,
minute = 9,
second = 13 )
print(date_time, type(date_time))
Каждый аргумент времени, по умолчанию, имеет значение 0. Мы так же можем использовать подход выше для получения, например, только года или времени:
date_time = datetime.datetime(year = 2019,
month = 2,
day = 4,
second = 13 )
# Получаем только время
time = date_time.strftime('%X')
print(time, type(time))
date = datetime.date(
year = 2018,
month = 5,
day = 3
)
# Получаем только год
year = date.year
print(year, type(year))
Если вы не укажете год, месяц или день, то получите ошибку т.к. они по умолчанию равны None:
- TypeError: Required argument ‘year’ (pos 1) not found
Есть отдельный класс для создания времени time:
time = datetime.time(12, 33, second=33, microsecond=122)
print(time, type(time))
print(time.hour)
Создание из строк
Используя strptime() можно создавать объект datetime из строки:
date_string = '21 September. 1999'
date_object = datetime.strptime(date_string, '%d %B. %Y')
print(date_object, type(date_object))
Продолжительность времени с timedelta
timedelta — это класс с помощью которого можно установить не дату, как в примерах выше, а продолжительность. Так мы создадим объект с 12 днями и 33 секундами:
duration_time = datetime.timedelta(days = 12, seconds = 33)
print(duration_time, type(duration_time))
Все атрибуты, которые мы можем указывать для этого класса:
- days
- seconds
- microseconds
- milliseconds
- minutes
- hours
Кроме этого мы можем преобразовывать эти объекты в секунды:
duration_time = datetime.timedelta(minutes = 1, seconds = 10)
# Преобразуем в секунды
seconds = duration_time.total_seconds()
print(seconds, type(seconds))
Разница между датами
Мы можем искать разницу между датами получая объект timedelta:
date_now = datetime.datetime.now()
date_tomorrow = datetime.datetime(2019, 12, 29)
# Вычисляем разницу между датами
difference = date_tomorrow - date_now
print(difference, type(difference))
print('Разница только в днях: ', difference.days)
Изменение объектов
Каждый их объектов выше можно изменить. Так мы изменим объект timedelta прибавив часы к минутам:
duration_hours = datetime.timedelta(hours = 1)
duration_minutes = datetime.timedelta(minutes = 10)
result = duration_hours + duration_minutes
print(result, type(result))
С помощью timedelta изменяется и дата. Пример ниже изменяет текущую дату прибавляя к ней 1 день и 1 час:
date_now = datetime.datetime.now()
duration_minutes = datetime.timedelta(days=1, minutes=10)
result = date_now + duration_minutes
print(result, type(result))
Сравнение и условия
Каких либо хитростей в сравнении объектов нет. В следующем примере идет сравнение двух дат с разницей в день:
date_one = datetime.datetime(2017,12,1)
date_two = datetime.datetime(2017,12,2)
if date_two > date_one:
print('{0} больше чем {1}'.format(date_two, date_one))
При этом стоит проверять, что объекты относятся к классу datetime, а не являются строками. В следующем примере мы сравниваем года, но они уже относятся к численным:
date_one = datetime.datetime(2017,12,1)
date_two = datetime.datetime(2017,12,2)
if date_two.year == date_one.year:
print('Год одинаковый. Тип данных: ', type(date_two.year))
Объект timedelta тоже можно сравнивать:
time_one = datetime.timedelta(seconds=2)
time_two = datetime.timedelta(minutes=1)
if time_one < time_two:
print('Pass')
Работа с метками (штампами) timestamp
При работе с API или в Unix системах мы можем увидеть отображение времени в таком формате:
1578238360
Данные числа обозначают количество секунд с 1 января 1970 года. Мы можем конвертировать данное число в понятный формат используя datetime:
timestamp = date.fromtimestamp(1578238360)
print(timestamp)
Так же сработает если мы хотим получить и время:
timestamp = datetime.fromtimestamp(1578238360)
print(timestamp)
Для конвертирования в timestamp используется метод с аналогичным названием:
from datetime import datetime
date_now = datetime.now()
print(date_now.timestamp)
Работа с часовыми поясами
К сожалению у меня нет большого опыта работы с часовыми поясами и примеры ниже не стоит рассматривать как лучшие практики.
Библиотека datetime не хранит часовые пояса, данные о переводах часов (летнее и зимнее время) и високосных секундах. К тому же, некоторые страны, могут изменить время опираясь на локальные ситуации. Эти ситуации опасны, когда идет запись в базу данных. Для вывода в GUI, можно использовать datetime.datetime.now() или высчитывать часовой пояс из базы.
Для записи в базу данных мы можем использовать время UTC и отдельно считать часовой пояс:
utc = datetime.datetime.utcnow()
print(utc)
Следующий пример вычислит разницу времени между UTC и локальным. Насколько я знаю он может не сработать на версиях Python < 3.3:
gmt = datetime.today() - datetime.utcnow()
print(gmt)
Для вычисления других часовых поясов можно использовать стороннюю библиотеку pytz, которая их хранит:
pip install pytz
Вывести все часовые пояса мы можем так:
import pytz
for tz in pytz.all_timezones:
print(tz)
На примере ниже я перевожу локальное время в часовой пояс Киева:
import pytz
from datetime import datetime
tz_kiev = pytz.timezone('Europe/Kiev')
time_kiev = datetime.now(tz_kiev)
print(time_kiev)
…
Теги:
#python
#datetime
В этой статье мы разберемся, как работать с датой и временем в Python при помощи модуля datetime. И для начала давайте напишем несколько простых программ, связанных с датой и временем.
Пример 1: Получение текущей даты и времени.
import datetime datetime_object = datetime.datetime.now() print(datetime_object)
Когда вы запустите программу, результат будет примерно таким:
2020-06-29 20:30:33.139533
В этом примере мы импортировали модуль datetime с помощью оператора import datetime
.
Одним из классов, определенных в модуле datetime, является класс datetime
. После импортирования модуля мы использовали метод now()
для создания объекта datetime
, содержащего текущие локальные дату и время.
Пример 2: Получение текущей даты.
import datetime date_object = datetime.date.today() print(date_object)
Когда вы запустите программу, результат будет примерно таким:
2020-06-29
В этой программе мы использовали метод today()
, определенный в классе date
, чтобы получить объект date
, содержащий текущую локальную дату.
Что находится внутри datetime?
Мы можем использовать функцию dir()
для получения списка, содержащего все атрибуты модуля datetime.
import datetime print(dir(datetime))
Когда вы запустите программу, вывод будет следующим:
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
Наиболее часто используемыми классами в модуле datetime являются:
date
time
datetime
timedelta
Класс datetime.date
Объект date
представляет дату (год, месяц и день).
Пример 3: объект date для представления даты.
import datetime d = datetime.date(2020, 6, 29) print(d)
Когда вы запустите программу, вывод будет следующим:
2020-06-29
В приведенном выше примере date()
является конструктором класса date
. Конструктор принимает три аргумента: год, месяц и день.
Переменная d
— это объект date
.
Вы можете создавать объекты класса date
, предварительно импортировав модуль datetime, а можете импортировать только класс date
из модуля datetime. Вот как это делается:
from datetime import date a = date(2020, 6, 29) print(a) # 2020-06-29
Пример 4: Получение текущей даты.
Для получения информации о текущей дате можно воспользоваться методом today()
.
from datetime import date today = date.today() print("Current date =", today)
Когда вы запустите программу, вывод будет следующим:
Current date = 2020-06-29
Пример 5: получение даты из метки времени (timestamp).
Мы также можем создавать объекты date
из метки времени (timestamp). Термин timestamp употребляется для обозначения POSIX-времени — количества секунд, прошедшего с 00:00:00 UTC 1 января, 1970 года. Вы можете преобразовать метку времени в дату при помощи метода fromtimestamp()
.
from datetime import date timestamp = date.fromtimestamp(1326244364) print("Date =", timestamp)
Когда вы запустите программу, вывод будет следующим:
Date = 2012-01-11
Пример 6: вывод текущего года, месяца и дня.
Мы легко можем получить год, месяц, день, день недели и т. д. из объекта date
. Вот как это делается:
from datetime import date today = date.today() print("Current year:", today.year) print("Current month:", today.month) print("Current day:", today.day)
Когда вы запустите программу, результат будет примерно таким:
Current year: 2020
Current month: 6
Current day: 29
Класс datetime.time
Экземпляр класса time
представляет собой время (часы, минуты, секунды и микросекунды).
Пример 7: объект time для представления времени.
from datetime import time # time(hour = 0, minute = 0, second = 0) a = time() print("a =", a) # time(hour, minute and second) b = time(11, 34, 56) print("b =", b) # time(hour, minute and second) c = time(hour = 11, minute = 34, second = 56) print("c =", c) # time(hour, minute, second, microsecond) d = time(11, 34, 56, 234566) print("d =", d)
Когда вы запустите программу, вывод будет следующим:
a = 00:00:00
b = 11:34:56
c = 11:34:56
d = 11:34:56.234566
Пример 8: вывод часов, минут, секунд и микросекунд.
После того как вы создадите объект time
, вы можете легко получить его атрибуты, такие как часы, минуты и т. д.
from datetime import time a = time(11, 34, 56) print("hour =", a.hour) print("minute =", a.minute) print("second =", a.second) print("microsecond =", a.microsecond)
Когда вы запустите программу, вывод будет следующим:
hour = 11
minute = 34
second = 56
microsecond = 0
Обратите внимание, что мы не передали аргумент microsecond
. Следовательно, его значение по умолчанию будет равно 0.
Экземпляр класса datetime
содержит информацию как о дате, так и о времени.
Пример 9: объект datetime.
from datetime import datetime #datetime(year, month, day) a = datetime(2018, 11, 28) print(a) # datetime(year, month, day, hour, minute, second, microsecond) b = datetime(2017, 11, 28, 23, 55, 59, 342380) print(b)
Когда вы запустите программу, вывод будет следующим:
2018-11-28 00:00:00
2017-11-28 23:55:59.342380
Первые три аргумента year
, month
и day
в конструкторе datetime()
являются обязательными. Отсутствующие данные будут заполнены нулями по умолчанию.
Пример 10: вывод года, месяца, часа, минуты и метки времени.
from datetime import datetime a = datetime(2017, 11, 28, 23, 55, 59, 342380) print("year =", a.year) print("month =", a.month) print("hour =", a.hour) print("minute =", a.minute) print("timestamp =", a.timestamp())
Когда вы запустите программу, вывод будет следующим:
year = 2017
month = 11
day = 28
hour = 23
minute = 55
timestamp = 1511913359.34238
Пример 11: получение текущего момента времени.
Мы можем получить информацию о текущем моменте времени не только с помощью уже упомянутого метода now()
, но и с помощью today()
.
from datetime import datetime date = datetime.today() print(date) date = datetime.now() print(date)
Когда вы запустите программу, результат будет примерно таким:
2020-06-29 20:35:33.353184
2020-06-29 20:35:33.356184
Класс datetime.timedelta
Объект timedelta
представляет разницу между двумя моментами времени.
Пример 12: разница между двумя моментами времени.
from datetime import datetime, date t1 = date(year = 2018, month = 7, day = 12) t2 = date(year = 2017, month = 12, day = 23) t3 = t1 - t2 print("t3 =", t3) t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33) t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13) t6 = t4 - t5 print("t6 =", t6) print("type of t3 =", type(t3)) print("type of t6 =", type(t6))
Когда вы запустите программу, вывод будет следующим:
t3 = 201 days, 0:00:00
t6 = -333 days, 1:14:20
type of t3 = <class 'datetime.timedelta'>
type of t6 = <class 'datetime.timedelta'>
Обратите внимание, что и t3
, и t6
имеют тип <class 'datetime.timedelta'>
.
Пример 13: разница между двумя объектами timedelta.
from datetime import timedelta t1 = timedelta(weeks = 2, days = 5, hours = 1, seconds = 33) t2 = timedelta(days = 4, hours = 11, minutes = 4, seconds = 54) t3 = t1 - t2 print("t3 =", t3)
Когда вы запустите программу, вывод будет следующим:
t3 = 14 days, 13:55:39
Здесь мы создали два объекта timedelta
— t1
и t2
, и их разница выводится на экран.
Пример 14: отрицательный объект timedelta.
from datetime import timedelta t1 = timedelta(seconds = 33) t2 = timedelta(seconds = 54) t3 = t1 - t2 print("t3 =", t3) print("t3 =", abs(t3))
Когда вы запустите программу, вывод будет следующим:
t3 = -1 day, 23:59:39
t3 = 0:00:21
Пример 15: интервал времени в секундах.
Вы можете получить общее количество секунд объекта timedelta
, используя метод total_seconds()
.
from datetime import timedelta t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423) print("total seconds =", t.total_seconds())
Когда вы запустите программу, вывод будет следующим:
total seconds = 435633.233423
Вы также можете найти сумму двух моментов времени, используя оператор +
. Кроме того, вы можете умножить и разделить объект timedelta
на целые числа и числа с плавающей точкой.
Больше информации о timedelta
вы можете найти в документации.
Формат datetime
Представление даты и времени может отличатся в разных странах, организациях и т. д. В США, например, чаще всего используется формат «мм/дд/гггг», тогда как в Великобритании более распространен формат «дд/мм/гггг».
В Python для работы с форматами есть методы strftime()
и strptime()
.
Python strftime() — преобразование объекта datetime в строку
Метод strftime()
определен в классах date
, datetime
и time
. Он создает форматированную строку из заданного объекта date
, datetime
или time
.
Пример 16: форматирование даты с использованием метода strftime().
from datetime import datetime now = datetime.now() t = now.strftime("%H:%M:%S") print("time:", t) s1 = now.strftime("%m/%d/%Y, %H:%M:%S") # mm/dd/YY H:M:S format print("s1:", s1) s2 = now.strftime("%d/%m/%Y, %H:%M:%S") # dd/mm/YY H:M:S format print("s2:", s2)
Когда вы запустите программу, результат будет примерно таким:
time: 20:43:57
s1: 06/29/2020, 20:43:57
s2: 29/06/2020, 20:43:57
Здесь %Y
, %m
, %d
, %H
и т. д. — коды для определения формата. Метод strftime()
принимает один или несколько кодов и возвращает отформатированную строку на его основе.
В приведенной выше программе переменные t
, s1
и s2
являются строками.
Основные коды для определения формата:
%Y
— год [0001, …, 2018, 2019, …, 9999]%m
— месяц [01, 02, …, 11, 12]%d
— день [01, 02, …, 30, 31]%H
— час [00, 01, …, 22, 23]%M
— минута [00, 01, …, 58, 59]%S
— секунда [00, 01, …, 58, 59]
Чтобы узнать больше о методе strftime()
и кодах форматирования, перейдите по ссылке.
Python strptime()- преобразование строки в объект datetime
Метод strptime()
создает объект datetime из заданной строки (представляющей дату и время).
Пример 17: метод strptime().
from datetime import datetime date_string = "21 June, 2018" print("date_string =", date_string) date_object = datetime.strptime(date_string, "%d %B, %Y") print("date_object =", date_object)
Когда вы запустите программу, вывод будет следующим:
date_string = 21 June, 2018
date_object = 2018-06-21 00:00:00
Метод strptime()
принимает два аргумента:
- строка, представляющая дату и время.
- формат, определяющий, каким образом части даты и времени расположены в переданной строке.
Кстати, коды %d
, %B
и %Y
используются для обозначения дня, месяца (название месяца в полном виде) и года соответственно.
Перейдите по ссылке чтобы узнать больше о методе strptime()
.
Обработка часового пояса в Python
Предположим, вы работаете над проектом и должны отображать дату и время в зависимости от часового пояса пользователей. Вместо того, чтобы пытаться обрабатывать часовой пояс самостоятельно, мы предлагаем вам использовать модуль pytZ.
from datetime import datetime import pytz local = datetime.now() print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S")) tz_NY = pytz.timezone('America/New_York') datetime_NY = datetime.now(tz_NY) print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S")) tz_London = pytz.timezone('Europe/London') datetime_London = datetime.now(tz_London) print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))
Когда вы запустите программу, результат будет примерно таким:
Local: 06/29/2020, 00:16:45
NY: 06/28/2020, 17:17:00
London: 06/28/2020, 22:17:00
Здесь datetime_NY
и datetime_London
— это объекты datetime
, содержащие текущую дату и время соответствующего часового пояса.
In this post, we are going to learn how to convert DateTime to string in Python using different code examples. To get the date in a different format in Python we use strftime(),format() functions and f-string.We will learn about all these functions in this post.
Python Strftime() Function
The datetime class has a member function strftime(). The strftime() function of the DateTime class takes two arguments in which the first argument is the string representation of datetime and the second is the format of the input string.
Syntax
datetime.strftime(Format_String)
Steps to convert DateTime to string in Python
- We need to import datetime module in our program and after that we can use the strftime() and format() functions to convert a datetime object to string in Python.
- We can choose datetime to string formats as per our requirement by using format codes given in below table at the end of this article.
1. How how to convert DateTime to string in Python using strftime()
In this example, we are converting datetime to string in the format of DD-MMM-YYYY HH:MM:SS using the strftime() function.
Program Example
from datetime import datetime dt_obj = datetime.now() date_to_str = dt_obj.strftime("%A %d-%b-%Y %H:%M:%S") print('datetime to string : ', date_to_str ) # date in YY/mm/dd date_format = dt_obj.strftime("%y/%m/%d") print("yy/mm/dd format :", date_format )
Output
datetime to string : Tuesday 20-Jul-2021 20:17:37 yy/mm/dd format : 21/07/20
- 6 ways to get current Timestamp in Python
- How to convert DateTime to string in Python
- How to convert string to datetime in Python
- Unix Timestamp to datetime in Python
2. How to Convert dateTime to Text
In this example, we are converting the datetime to text format using the strftime() function.
Program Example
from datetime import datetime dt_obj = datetime.now() dt_to_text = dt_obj.strftime("All are informed thatn %A %d %B %Y is board metting at : %I:%M %p") print(time_to_Str )
Output
All are informed that Wednesday 21 July 2021 is board metting at : 12:33 AM
3. Convert Python date to string
Sometime instead of datetime we need to convert only Python date to string in different formats. In this example we are converting Python date only to differnt string formats.
Program Example
from datetime import datetime dt_obj = datetime.now() #Date Month Year Date_to_str = dt_obj.strftime("%d %b, %Y") print("dd/mm/year:", Date_to_str) #Full Textual month name, day and year Dt_st_Frmt = dt_obj.strftime("%B %d, %Y") print("month name/day/year :", Dt_st_Frmt) #mm/dd/yyyy dt_frt = dt_obj.strftime("%m/%d/%Y") print("mm/dd/yyyy:",dt_frt )
Output
dd/mm/year: 20 Jul, 2021 month name/day/year : July 20, 2021 mm/dd/yyyy: 07/20/2021
nknnm
4. Convert Python Time to string
Sometimes we need to convert Python time into different string formats as we are doing in the below example.
Program Example
from datetime import datetime dt_obj = datetime.now() time_to_Str = dt_obj.strftime("%H:%M:%S.%f") print("hh:mm:ss:ms =",time_to_Str )
Output
hh:mm:ss:ms = 20:53:36.388952
5. Using format() function
The format() function can be used to convert datetime to different string formats. It is provided with curly brackets followed by a colon mark.
Program example
from datetime import datetime dt_obj = datetime.now() print('Day/mm/dd/yyyy : ', '{:%a, %B %d %Y}'.format(dt_obj)) print('mm/dd/yyyy : ', '{:%m/%d/%Y}'.format(dt_obj)) print('mm/dd/yy hh:mm:ss : ','{:%m/%d/%y %H:%M %S}'.format(dt_obj)) print('mm/dd/yy hh:mm:ss:ms : ' ,'{:%m/%d/%y %I:%M %S %f}'.format(dt_obj))
Output
Day/mm/dd/yyyy : Wed, July 21 2021 mm/dd/yyyy : 07/21/2021 mm/dd/yy hh:mm:ss : 07/21/21 09:05 08 mm/dd/yy hh:mm:ss:ms : 07/21/21 09:05 08 993077
6. How to convert DateTime to string in Python sing f-string
By using f-string, the datetime can be converted into different string formats. The f-string is evaluated at run-time. We can use any valid Python expression in them.
from datetime import datetime dt_obj = datetime.now() dt_to_str = f'The date to string is mm/dd/yyyy : {dt_obj:%b %d, %Y}' dt_to_str1 = f'The date to string mm/dd/yy hh:mm:ss:ms: {dt_obj:%m/%d/%y %H:%M %S}' print(dt_to_str) print(dt_to_str1)
Output
The date to string is mm/dd/yyyy : Jul 21, 2021 The date to string mm/dd/yy hh:mm:ss:ms: 07/21/21 17:36 32
Table of DateTime format code in Python
These are list of format code available in Python as per python docs
Format codes | Description | Example |
---|---|---|
%a | Weekday as the abbreviated name | Sun, Mon, …, Sat |
%A | Weekday as locale’s full name | Sunday,…Saturday |
%w | Weekday as a decimal number, 0 is Sunday,6 is Saturday. | 0, 1, …, 6 |
%d | Day of the month as a zero-padded decimal number. | 01, 02, …, 31 |
%b | Month as locale’s abbreviated name. | Jan, Feb, …, Dec |
%m | Month as a zero-padded decimal number. | 01, 02, …, 12 |
%B | Month as locale’s full name. | January, February,.. |
%y | Year without century | 00, 01, …, 99 |
%Y | Year with century | 0001, 0002, …, 9998, 9999 |
%H | Hour (24-hour clock) as a zero-padded decimal number. | 00, 01, …, 23 |
%I | Hour (12-hour clock) as a zero-padded decimal number. | 01, 02, …, 12 |
%p | Locale’s equivalent of either AM or PM. | AM, PM |
%M | Minute as a zero-padded decimal number. | 00, 01, …, 59 |
%s | The second is a zero-padded decimal number. | 00, 01, …, 59 |
%f | Microsecond as a decimal number, zero-padded on the left. | 000000, 000001, …, 999999 |
Summary
In this post, we have learned different ways of How to convert DateTime to string in Python with code example by Using strftime(), format() functions. We can change the datetime to string format as per our requirment using any of both methods by passing format code as given in above table.
Модуль datetime из стандартной библиотеки языка программирования Python представляет собой сборник из самых разных классов для комфортной работы со временем и датами. За счет множества встроенных методов, предназначенных для удобного отображения, а также манипуляции над временем и датами, повышается функциональность некоторых программ.
Применение
Библиотека datetime используется для работы в Python со временем и датами, позволяя представлять данную информацию в наиболее удобной форме.
Она состоит из нескольких классов. Благодаря их наличию, программист получает доступ к многим полезным методам:
- Получение текущих системных даты и времени;
- Вычисления разницы между датами и другие арифметические операции;
- Операциям, которые позволяют сравнивать время;
- Форматированный вывод информации о дате и времени.
В модуле используются константы MINYEAR и MAXYEAR, которые равны 1 и 9999 соответственно. Это минимальное и максимально возможное значение года, используемые в библиотеке.
Отличие datetime от time
Но в Python помимо библиотеки datetime есть еще библиотека time. Давайте разберемся, какую из них нам следует использовать:
Модуль time обычно используется при работе с текущем временем, основывающемся на значении в секундах, прошедших с начала эпохи. Позволяет делать его форматированный вывод. Есть возможности установки пауз в выполнении скрипта с помощью метода sleep. Используется для вычисления времени работы программы с помощью monotonic.
В отличие от модуля time, в datetime есть несколько встроенных классов, позволяющих производить различные манипуляции с датой и временем, такие как арифметические операции или сравнение.
То есть, если требуется производить арифметические операции со временем, то тогда используем datetime.
Классы библиотеки
Модуль datetime включает в себя несколько разных классов, каждый из которых обладает собственными методами и свойствами, а также служит для определенных целей. Все они представлены в следующей таблице, где содержатся их названия и краткая характеристика.
Название | Характеристика |
date | представляет собой дату, полностью исключая данные о времени, на основе Григорианского календаря |
time | включает данные о времени, полностью игнорируя сведения о дате |
datetime | содержит информацию о времени и дате, основываясь на данных из Григорианского календаря |
timedelta | описывает определенный период во времени, который находится между двумя различными моментами |
tzinfo | представляет различные сведения о часовом поясе |
timezone | описывает время, руководствуясь стандартом UTC |
Далее будет рассмотрено как с помощью этих классов можно в Python работать с датой и временем. Разберем основные примеры использования библиотеки datetime.
date
Класс date используется для представления данных о дате, которые включают год, месяц и число. Чтобы иметь возможность применять этот класс, необходимо предварительно импортировать модуль datetime, поместив соответствующую инструкцию в начало файла с программным кодом. Для создания объектов типа date следует произвести вызов одноименного конструктора, указав ему в качестве параметров сведения о дате. При этом нельзя забывать о порядке, в котором находятся аргументы: год, затем месяц и число.
Следующий пример демонстрирует создание объекта date, где переменная под названием a получает три обозначенных выше значения. После этого сведения о дате выводятся на экран при помощи метода print, а функция type позволяет получить имя класса для этого объекта.
import datetime a = datetime.date(2001, 10, 28) print(a) print(type(a)) 2001-10-28 <class 'datetime.date'>
Если необходимо в Python получить информацию о текущей дате, совсем необязательно вызывать стандартный конструктор date и вручную вбивать подходящие значения. С этой задачей как нельзя лучше справляется встроенный метод today. В следующем фрагменте кода показано как можно быстро присвоить сегодняшнюю дату объекту, а затем вывести эту информацию.
import datetime a = datetime.date.today() print(a) 2018-11-08
Иногда приходится работать не только с общими сведениями о дате, но и с отдельными ее составляющими, годом, месяцем или днем. Получить доступ к данным свойствам объекта можно с помощью оператора точки. Однако следует помнить, что изменить их у текущего объекта нельзя. В следующем примере показывается как переменная a инициализируется с помощью конструктора, после чего на экране отображаются все ее свойства по-отдельности.
import datetime a = datetime.date(2012, 7, 21) print(a.year) print(a.month) print(a.day) 2012 7 21
time
Класс time служит для демонстрации данных о времени, полностью игнорируя дату. Как и в случае с предыдущим классом date, следует импортировать модуль datetime с помощью ключевого слова import. Создать объект, принадлежащий к типу time можно с помощью конструктора, который принимает такие аргументы как количество часов, минут, секунд и микросекунд. Указывая данные параметры, не стоит забывать об их необходимом порядке, расставляя числа на правильных позициях. Также нужно помнить, что существуют ограничения, к примеру, нельзя отображать время со значением более 59 на месте секунд.
В следующем фрагменте кода создается переменная a, которой присваивается объект типа time с четырьмя разными свойствами: число часов, минут, секунд и микросекунд. Благодаря методу print выводится информация об этом объекте, а функция type отображает его класс.
import datetime a = datetime.time(12, 18, 35, 5867) print(a) print(type(a)) 12:18:35.005867 <class 'datetime.time'>
Чтобы создать объект типа time необязательно указывать все его свойства в конструкторе. Как видно из результатов выполнения описанной ниже программы, недостающие данные о времени автоматически заполняются нулями, в то время как введенные числа добавляются в объект от большего к меньшему. Таком образом, инициализируются три разных переменных a, b и c, после чего методы print выводят информацию об их текущем состоянии на дисплей.
import datetime a = datetime.time(23, 5, 30) b = datetime.time(7, 26) c = datetime.time(21) print(a) print(b) print(c) 23:05:30 07:26:00 21:00:00
Также, как и в классе date, пользуясь time, можно получать доступ к отдельным значениям созданного ранее объекта: часам, минутам, секундам и микросекундам. Для этого нужно применить оператор точка, после чего указать конкретное свойство. В следующем примере демонстрируется вывод информации, представляющей отдельные сведения об объекте a.
import datetime a = datetime.time(16, 3, 49, 23578) print(a.hour) print(a.minute) print(a.second) print(a.microsecond) 16 3 49 23578
datetime
Класс datetime позволяет описывать данные об определенном моменте во времени, который учитывает не только часы и минуты, но и сведения о дате. Как и в случае с предыдущими типами объектов, здесь используется конструктор с несколькими аргументами под каждое значение. В следующем примере демонстрируется программа, где переменная под именем a получает объект из стандартного конструктора datetime, после выводит свое значение и тип.
import datetime c = datetime.datetime(2017, 7, 18, 4, 52, 33, 51204) print(c) print(type(c)) 2017-07-18 04:52:33.051204 <class 'datetime.datetime'>
Создавать объекты можно с разным набором параметров, указывая только нужные сведения. Отсутствующие данные по умолчанию будут заполнены нулями. Приведенный ниже код показывает, как создаются два объекта a и b, первый из которых изначально содержит только дату, а второй обладает информацией о дате и о времени.
import datetime a = datetime.datetime(2007, 2, 13) b = datetime.datetime(2013, 10, 25, 12, 8, 47) print(a) print(b) 2007-02-13 00:00:00 2013-10-25 12:08:47
Получить текущий момент времени можно при помощи двух разных методов, один из которых уже использовался ранее в date. Следующий код демонстрирует вызов функций today и now, возвращающих в Python текущую дату и время с точностью до микросекунд. Метод print как обычно позволяет отобразить эти сведения на дисплее.
import datetime a = datetime.datetime.today() b = datetime.datetime.now() print(a) print(b) 2018-11-08 11:12:53.256261 2018-11-08 11:12:53.256270
Существует определенный формат, в котором дата и время выводятся по умолчанию, но данное представление не всегда удовлетворяет запросы пользователя.
Чтобы в Python преобразовать дату и время в строку нужного формата, следует воспользоваться методом strftime, указав ему в качестве аргумента параметры форматирования. Как можно понять из примера, который находится ниже, за воспроизведение информации о количестве дней или минут отвечают специальные зарезервированные символы, идущие следом за знаком процента.
Стоит заметить, что здесь создаются два совершенно идентичных объекта при помощи метода today. Однако, благодаря работе функции strftime, каждый из них получает свою форму для вывода на экран (день, месяц и год для переменной a, час, минута, секунда для переменной b). После этого метод print отображает сведения в заданном ранее формате.
import datetime a = datetime.datetime.today().strftime("%d.%m.%Y") b = datetime.datetime.today().strftime("%H:%M:%S") print(a) print(b) 08.11.2018 11:41:04
Доступные типы форматов для вывода через консоль располагаются в следующей таблице. Здесь можно найти их обозначения, а также краткое описание того, что именно они делают.
Формат | Значение |
%a | название дня недели в сокращенном виде |
%A | название дня недели в полном виде |
%w | номер дня недели в виде целого числа |
%d | номер дня месяца в виде целого числа |
%b | название месяца в сокращенном виде |
%B | название месяца в полном виде |
%m | номер месяца в числовом представлении |
%y | номер года без столетия |
%Y | номер года в полном представлении |
%H | количество часов в 24-часовом формате |
%I | количество часов в 12-часовом формате |
%p | до полудня или после полудня в 12-часовом формате |
%M | количество минут в виде целого числа |
%S | количество секунд в виде целого числа |
%f | количество микросекунд в виде целого числа |
%z | часовой пояс в формате UTC |
%Z | название часового пояса |
%j | номер дня в году |
%U | номер недели в году, если считать с воскресенья |
%w | номер недели в году, если считать с понедельника |
%c | местное представление даты и времени |
%x | местное представление даты |
%X | местное представление времени |
%% | символ процента |
Как и в случае с time и date, в классе datetime пользователь в состоянии получать доступ к отдельным свойствам созданного объекта (годам, месяцам, дням, часам, минутам, секундам и микросекундам. В следующем примере кода демонстрируется вывод данных значений.
import datetime a = datetime.datetime(2015, 3, 27, 8, 12, 24, 34574) print(a.year) print(a.month) print(a.day) print(a.hour) print(a.minute) print(a.second) print(a.microsecond) 2015 3 27 8 12 24 34574
Сформировать новый объект типа datetime можно и с помощью двух разных объектов, представляющих время и дату (time и date). Для этого используется функция combine. В следующем примере показывается как переменные a и b получают некоторые значения, после чего передаются методу combine в качестве двух параметров.
from datetime import datetime, date, time a = date(2015, 3, 19) b = time(2, 10, 43) c = datetime.combine(a, b) print(c) 2015-03-19 02:10:43
Операции
Пользуясь классом datetime, можно легко находить разницу между двумя разными датами. Следующим пример демонстрирует создание двух объектов. Переменная a представляет собой дату, которую передает ей метод now, а b задается при помощи конструктора вручную. Выполнив простую операцию нахождения разницы между объектами a и b, можно получить третий объект c. Применение функции print позволяет напрямую вывести на экран его свойства за счет оператора точки.
from datetime import datetime a = datetime.now() b = datetime(2015, 3, 21) c = a - b print(c.days) print(c.seconds) print(c.microseconds) 1328 43219 65190
Перечень доступных операций, с которыми можно работать, располагается в следующей таблице. Здесь находятся примеры операций и их назначение.
Операция | Значение |
a + b | суммирует значения дат a и b |
a – b | находит разницу между датами a и b |
a * i | умножает численное представление свойств даты a на некую константу i |
a // i | делит численное представление свойств даты a на некую константу i, остаток отбрасывается |
+a | возвращает объект timedelta с полностью идентичным значением a |
–a | возвращает объект timedelta с полностью противоположным значением a |
a > b | возвращает true, если a больше b |
a < b | возвращает true, если a меньше b |
abs(a) | возвращает объект timedelta с положительным значением всех свойств a |
str(a) | возвращает строковое представление объекта a в формате, заданном по умолчанию |
repr(a) | возвращает строковое представление объекта a в формате с отрицательными значениями |
timedelta
Класс timedelta предназначен для удобного выполнения различных манипуляций над датами и временем. Можно создать объект данного класса, воспользовавшись конструктором. Аргументами являются дни, часы, минуты, секунды, микросекунды и недели, задать которые можно с помощью прямого обращения к именам свойств, как это показано в следующем примере. Как и раньше, метод print позволяет выводить сведения о дате на экран, а функция type отображает тип созданного объекта.
from datetime import timedelta a = timedelta(days=5, hours=21, minutes=2, seconds=37) print(a) print(type(a)) 5 days, 21:02:37 <class 'datetime.timedelta'>
Также можно прибавлять разные даты, формируя тем самым новый объект. В следующем примере показано, как получить сумму двух разных дат, воспользовавшись арифметической операцией для переменных a и b. Результат данного действия присваивается объекту под названием c, после чего выводится на экран в обычном формате при помощи метода print.
from datetime import datetime, timedelta a = datetime(2006, 12, 5) b = timedelta(hours=2, minutes=5, seconds=17) print(a) c = a + b print(c) 2006-12-05 00:00:00 2006-12-05 02:05:17
tzinfo и timezone
Классы tzinfo и timezone применяются для работы с информацией, которая содержит сведения о часовых поясах. Создать объект, принадлежащий типу tzinfo невозможно, поскольку этот класс является абстрактным. Однако можно воспользоваться наследованием, создав собственный класс на основе tzinfo. При этом следует помнить, что для работы с такими объектами придется реализовать несколько абстрактных методов, к числу которых относятся utcoffset (смещение по местному времени с UTC), dst (настройка перехода на летнее время), а также функция tzname (имя часового пояса в виде строки).
from datetime import tzinfo, timedelta, datetime, timezone class UTC0530(tzinfo): def __init__(self, offset=19800, name=None): self.offset = timedelta(seconds=offset) self.name = name or self.__class__.__name__ def utcoffset(self, dt): return self.offset def tzname(self, dt): return self.name def dst(self, dt): return timedelta(0) a = datetime.now(timezone.utc) print(a) b = datetime.now(UTC0530()) print(b) print(b.utcoffset()) print(b.tzname()) print(b.dst()) 2018-11-09 11:00:11.889875+00:00 2018-11-09 16:30:11.890014+05:30 5:30:00 UTC0530 0:00:00
В приведенной программе демонстрируется создание пользовательского класса UTC0530, в котором описаны методы utcoffset, dst и tzname, а также применение нового типа с двумя объектами a и b. Таким образом, получается отображение времени со смещением +5:30.
Заключение
Таким образом, пользуясь классами из библиотеки datetime, можно повысить эффективность работы программ, которые взаимодействуют со временем и датой. Возможности встроенных методов позволяют не только отображать нужные сведения в удобном формате, но также по-разному манипулировать ими, например, добавляя либо отнимая часы, минуты и секунды.