Как изменить формат даты питон

Сегодня рассмотрим два метода strftime и strptime из стандартной библиотеки datetime в языке программирования Python.

Форматирование даты и времени в Python

На чтение 3 мин Просмотров 17.4к. Опубликовано 14.03.2021

Сегодня рассмотрим два метода strftime и strptime из стандартной библиотеки datetime в языке программирования Python.

Содержание

  1. Описание формата strftime
  2. Использование strftime
  3. Преобразование даты в strftime
  4. Отображение миллисекунд
  5. Описание формата strptime
  6. Использование метода strptime
  7. Заключениеы

Описание формата 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 есть в шапке. Залетай.

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's user avatar

alecxe

455k116 gold badges1061 silver badges1180 bronze badges

asked Mar 30, 2014 at 1:02

user3307366's user avatar

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

alecxe's user avatar

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.nouri's user avatar

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

Snoop Dogg's user avatar

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 может использоваться для управления значениями даты и времени. Модуль содержит ряд классов, которые можно использовать для этой цели. Например, класс времени используется для представления значений времени, а класс даты – для представления значений календарной даты.

Improve Article

Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    In this article, we will see how to format date using strftime() in Python. localtime() and gmtime() returns a tuple representing a time and this tuple is converted into a string as specified by the format argument using python time method strftime().

    Syntax:

    time.strftime(format[, sec])

    sec: This is the time in number of seconds to be formatted.

    format: This is the directive or format code which would be used to format.

    Directive or format code  Returned Valued Example
    %Y Full year with century 2021,2022
    %y Year without century with zero padded value 00,01,….21,22…,99
    %-y Year without century 0,1…,99
    %m Month with zero padded value 01-12
    %-m Month without zero padded value 1-12
    %B Full month name January, February,…, December
    %b Short form of month  Jan, Feb,…,Dec
    %A Full weekday name Sunday, Monday,..
    %a Short form of weekday name Sun, Mon,..
    %w Weekday as decimal value 0-6
    %d Days with zero padded value 01-31
    %-d Days with decimal value 1-31
    %H Hour (24-hour clock) as a zero-padded value. 00-23
    %-H Hour (24-hour clock) without zero-padded value. 0,1,…,23
    %I Hour (12-hour clock) as a zero-padded value. 01-12
    %-I Hour (12-hour clock) without zero-padded value. 1-12
    %M Mins with zero-padded  00-59
    %-M Mins without zero padded value 0-59
    %S Secs with zero padded value 00-59
    %-S Secs without zero padded value 0-59
    %f Micro Secs with zero-padded value 000000 – 999999
    %p Locale’s AM or PM. AM/PM
    %j Day of the year with zero padded value 001-366
    %-j Day of the year without zero padded value 1-366
    %z UTC offset in the form +HHMM or -HHMM.  
    %Z Time zone name.  
    %C Locale’s appropriate date and time Fri Apr 02 02:09:07 2020
    %x Locale’s appropriate date 02/04/22
    %X Locale’s appropriate time 02:04:22
    %W Week number of the year. Monday as first day of week 00-53
    %U Week number of the year. Sunday as first day of week 00-53

    Below are some examples for better understanding.

    Example 1: 

    Python3

    from datetime import datetime

    time = datetime.now()

    print("Without formatting:", time)

    print("After formatting:", time.strftime("%b %d, %Y"))

    Output

    Without formatting: 2022-11-29 12:59:08.088819
    After formatting: Nov 29, 2022

    Output:

    Example 2: 

    Python3

    from datetime import datetime

    time = datetime.now()

    print("Without formatting:", time)

    print("Year", time.strftime("%Y"))

    print("Month name", time.strftime("%B"))

    print("Day", time.strftime("%d"))

    Output:

    Example 3: 

    Python3

    from datetime import datetime

    time = datetime.now()

    print(time.strftime("%m/%d/%y"))

    print(time.strftime("%B %d, %Y"))

    print(time.strftime("%H:%M:%S"))

    Output:

    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

    И наоборот, метод класса 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 или возвращать пустую строку.

    Замечания:

    1. Поскольку формат зависит от текущей локали, необходимо соблюдать осторожность при предположении о выходном значении. Порядок полей будет различаться, например “month/day/year” или “day/month/year”, а выходные данные могут содержать символы Юникода, закодированные с использованием кодировки по умолчанию для локали (например, если текущим языковым стандартом является ja_JP, Кодировка по умолчанию может быть любой из eucJP, SJIS или utf-8. Используйте функцию locale.getlocale() для определения кодировки текущей локали.
    2. Метод .strptime() может анализировать годы во всем диапазоне [1, 9999], но годы < 1000 должны быть заполнены нулями до ширины из 4 цифр.
    3. При использовании с методом .strptime() код форматирования %p влияет только на поле выходного часа, если код форматирования %I используется для анализа часа.
    4. В отличие от модуля time, модуль datetime не поддерживает високосные секунды.
    5. При использовании с методом .strptime() код форматирования %f принимает от одной до шести цифр и ноль справа. Код %f является расширением набора символов формата в стандарте C, но реализовано отдельно в объектах datetime и поэтому всегда доступно.
      • %zutcoffset() преобразуется в строку вида ±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 заменяется возвращаемым значением, которое должно быть строкой.
    6. При использовании метода .strptime() коды %U и %W используются только в вычислениях, если указаны день недели и календарный год %Y.

    7. Похожий на коды форматирования %U и %W, код %V используется только в вычислениях, когда день недели и год ISO %G указываются в строке формата .strptime(). Также обратите внимание, что коды %G и %Y не являются взаимозаменяемыми.

    8. При использовании с методом .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)

    Получение текущей даты и времени в Python datetime

    Как видно мы получаем для создания объекта даты и времени используется класс с тем же именем что и модуль datetime.

    Когда нужно получить только дату используется класс date:

    import datetime
    day = datetime.date.today()
    print(day)

    Получение текущей даты в Python datetime

    Получение только времени выполняется через метод time():

    import datetime
    date_time = datetime.datetime.now().time()
    print(date_time, type(date_time))

    Получение времени в Python datetime

    Каждый из описываемых классов можно импортировать следующим способом:

    from datetime import date
    from datetime import datetime
    print(datetime.now())
    print(date.today())

    Импорт модуля datetime в Python

    Форматирование и перевод в строку

    Для получение части даты или времени можно использовать следующие атрибуты:

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

    Форматирование строки с датой в Python datetime

    Так же есть метод strftime, который форматирует даты в нужном формате в строку. Например так мы получим дату в формате, который используется у нас:

    import datetime
    date = datetime.datetime.today()
    print(date.strftime('%d-%m-%Y %H:%M'))

    Форматирование в datetime Python

    Где:

    • %d — день месяца с 1 по 31;
    • %m — месяц с 1 по 12;
    • %Y — год;
    • %H — час в формате 0-24;
    • %M — минуты;
    • %S — секунды.

    Таким же способом можно получить время и дату:

    • %c — время и дата;
    • %x — дата;
    • %X — время.
    date = datetime.datetime.today()
    print(date.strftime('%x'))

    Форматирование в datetime Python

    Обратите внимание, что таким способом мы преобразуем объект класса 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)

    Типы дат в datetime Python

    Мы получим ошибку так как уже работаем со строкой:

    • 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())

    Получение дня недели в Python datetime

    Или получить название:

    date = datetime.datetime.today()
    print(date.strftime('%A'))
    print(date.strftime('%a'))

    Получение имени дня недели в Python datetime
    Где:

    • %A — полное название дня недели;
    • %a — сокращенное название дня недели;
    • %s — представление в виде числа.

    Такой же принцип по работе с месяцами, где:

    • %B —  полное название месяца;
    • %b — сокращенное название месяца;
    • %m — месяц в виде числа.

    Создание объекта даты и времени

    Для создания даты используется класс с аргументами date(год, месяц, число):

    date = datetime.date(2019, 1, 13)
    print(date, type(date))

    Создание объекта с даты в Python datetime

    Можно создать дату и время. В обоих случаях мы можем использовать именованные аргументы если так удобнее:

    date_time = datetime.datetime(year = 2019,
                             month = 2,
                             day = 4,
                             hour = 7,
                             minute = 9,
                             second = 13 )
    print(date_time, type(date_time))

    Создание объекта с датой и временем в Python datetime

    Каждый аргумент времени, по умолчанию, имеет значение 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))

    Именованные аргумента в datetime Python

    Если вы не укажете год, месяц или день, то получите ошибку т.к. они по умолчанию равны 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)

    Создание объекта времени в datetime Python

    Создание из строк

    Используя strptime() можно создавать объект datetime из строки:

    date_string = '21 September. 1999'
    date_object = datetime.strptime(date_string, '%d %B. %Y')
    print(date_object, type(date_object))

    Создание даты из строки с datetime strptime Python

    Продолжительность времени с timedelta

    timedelta — это класс с помощью которого можно установить не дату, как в примерах выше, а продолжительность. Так мы создадим объект с 12 днями и 33 секундами:

    duration_time = datetime.timedelta(days = 12, seconds = 33)
    print(duration_time, type(duration_time))

    Продолжительность с timedelta в Python datetime

    Все атрибуты, которые мы можем указывать для этого класса:

    • days
    • seconds
    • microseconds
    • milliseconds
    • minutes
    • hours

    Кроме этого мы можем преобразовывать эти объекты в секунды:

    duration_time = datetime.timedelta(minutes = 1, seconds = 10)
    # Преобразуем в секунды
    seconds = duration_time.total_seconds()
    print(seconds, type(seconds))

    Получение секунд в datetime Python

    Разница между датами

    Мы можем искать разницу между датами получая объект 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)

    Разница между датами в Python datetime

    Изменение объектов

    Каждый их объектов выше можно изменить. Так мы изменим объект timedelta прибавив часы к минутам:

    duration_hours = datetime.timedelta(hours = 1)
    duration_minutes = datetime.timedelta(minutes = 10)
    result = duration_hours + duration_minutes
    print(result, type(result))

    Изменение времени в Python datetime

    С помощью 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))

    Добавление дней в Python datetime 

    Сравнение и условия

    Каких либо хитростей в сравнении объектов нет. В следующем примере идет сравнение двух дат с разницей в день:

    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 в Python

    При этом стоит проверять, что объекты относятся к классу 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))

    Сравнение годов в Python datetime

    Объект timedelta тоже можно сравнивать:

    time_one = datetime.timedelta(seconds=2)
    time_two = datetime.timedelta(minutes=1)
    if time_one < time_two:
        print('Pass')

    Сравнение timedelta в Python datetime 

    Работа с метками (штампами) timestamp

    При работе с API или в Unix системах мы можем увидеть отображение времени в таком формате:

    1578238360

    Данные числа обозначают количество секунд с 1 января 1970 года. Мы можем конвертировать данное число в понятный формат используя datetime:

    timestamp = date.fromtimestamp(1578238360)
    print(timestamp)

    Работа с UNIX timestamp Python datetime

    Так же сработает если мы хотим получить и время:

    timestamp = datetime.fromtimestamp(1578238360)
    print(timestamp)

    Получение даты и времени из timestamp в Python datetime

    Для конвертирования в timestamp используется метод с аналогичным названием:

    from datetime import datetime
    
    date_now = datetime.now()
    print(date_now.timestamp)

    Создание timestamp в Python datetime

    Работа с часовыми поясами

    К сожалению у меня нет большого опыта работы с часовыми поясами и примеры ниже не стоит рассматривать как лучшие практики. 

    Библиотека datetime не хранит часовые пояса, данные о переводах часов (летнее и зимнее время) и високосных секундах. К тому же, некоторые страны, могут изменить время опираясь на локальные ситуации. Эти ситуации опасны, когда идет запись в базу данных. Для вывода в GUI, можно использовать datetime.datetime.now() или высчитывать часовой пояс из базы.

    Для записи в базу данных мы можем использовать время UTC и отдельно считать часовой пояс:

    utc = datetime.datetime.utcnow()
    print(utc)

    Время UTC в Python Datetime

    Следующий пример вычислит разницу времени между UTC и локальным. Насколько я знаю он может не сработать на версиях Python < 3.3:

    gmt = datetime.today() - datetime.utcnow()
    print(gmt)

    Разница во времени UTC Python datetime

    Для вычисления других часовых поясов можно использовать стороннюю библиотеку pytz, которая их хранит:

    pip install pytz

     Вывести все часовые пояса мы можем так:

    import pytz
    for tz in pytz.all_timezones:
        print(tz)

    Вывод всех часовых поясов в Python pytz

    На примере ниже я перевожу локальное время в часовой пояс Киева:

    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

    Понравилась статья? Поделить с друзьями:

    Читайте также:

  • Как изменить формат даты на редми 9а
  • Как изменить формат даты на компьютере
  • Как изменить формат даты на андроиде
  • Как изменить формат даты на айфоне
  • Как изменить формат даты mysql

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии