Python time strftime timezone

Метод strptime() и strftime() в Python: инструкция и примеры

Для работы с датой и времен в Python предназначен модуль datetime . Этот модуль позволяет всячески манипулировать с временными величинами, что весьма полезно в скриптах, ориентированных на использование в реальном времени. С помощью этого модуля можно считать текущее время на устройстве, узнать разницу между разными моментами времени или, наоборот, прибавить к текущему времени некоторый временной отрезок и запустить счетчик на сайте с отсчетом до какого-нибудь события.

Одна из проблем, связанных с любыми датами и временем — это его формат. В Америке распространен формат MM-DD-YYYY: сначала идет месяц, потом день и в конце располагается год. Для русскоязычных стран более привычным является формат DD-MM-YYYY. Помимо них существуют иные записи даты и времени. Иногда в скриптах возникает необходимость считывать и выводить данные формата datetime , то есть дату. Чтобы сделать этот процесс более комфортным, разработчики придумали два метода для преобразования строк в формат datetime и обратно — strptime() и strftime() .

В рамках этого материала мы разберем работу этих методов в Python и практику их применения.

Метод strptime()

Метод класса datetime strptime() принимает в качестве одного из аргументов строку и создает на основе её объект типа datetime. Метод имеет следующий синтаксис:

Читайте также:  Http метод post java

datetime.strptime(string_date, ‘params’) , где

  • string_date — это строка, на основе которой нужно создать объект типа datetime ;
  • params — это коды форматы. Их мы рассмотрим в разделе «Список кодов формата». В целом, они передают методу информацию о том, какой формат имеет дата в строке: 10.11.2022, 11.10.2022 или 10 ноябрь 2022.

Для примера возьмем несколько случайных дат с разным форматом и создадим на их основе новые объекты.

Рассмотрим работу datetime strptime в Python 3 на примерах :

from datetime import datetime as dt

first_strdate='10.05.2025'
second_strdate='26-June-2005'
third_strdate='5 Jan, 11'

first_date=dt.strptime(first_strdate, '%d.%m.%Y')
second_date=dt.strptime(second_strdate, '%d-%B-%Y')
third_date=dt.strptime(third_strdate, '%d %b, %y')

print(first_strdate, '->', first_date)
print(second_strdate, '->', second_date)
print(third_strdate, '->', third_date)
10.05.2025 -> 2025-05-10 00:00:00
26-June-2005 -> 2005-06-26 00:00:00
5 Jan, 11 -> 2011-01-05 00:00:00

Как видим, в строке дата может принимать различные форматы. Шаблон, по которому на основе этой строки будет создан новый объект, описывается с помощью кодов формата и пунктуационных знаков, соответствующих этой строке. Разберемся подробнее в принципе их работы.

В первой строке из примера дата имеет формат DD.MM.YYYY. Чтобы передать информацию об этом в метод мы используем следующие обозначения:

  • %d — день месяца в виде десятичного числа;
  • %m — номер месяца;
  • %Y — год с указанием века;

Между кодов мы используем те же пунктуационные разделители, что и в исходной строке.

Метод strftime()

Метод strftime() преобразует объект типа datetime в строку. Метод имеет следующий синтаксис:

  • object — объект типа datetime , который необходимо преобразовать в строку;
  • params — форматы кода, на основании которых необходимо сформировать строку;

Рассмотрим несколько практических примеров, как это работает на практике:

from datetime import datetime as dt

time = dt.now()

day_of_the_month = time.strftime("%d")
day_of_the_week = time.strftime(("%A"))
month = time.strftime("%B")
year = time.strftime("%Y")

format_of_time = time.strftime("%H:%M")
print('Today is', day_of_the_week+'.', 'It is', day_of_the_month, 'day of the', month, year)
print('Current time', format_of_time)
Today is Thursday. It is 10 day of the November 2022
Current time 15:40

Список кодов формата

В этом разделе размещено описание всех кодов формата.

%a

Сокращенная форма дня недели. Например, Пт или Fri для пятницы в русской и английской локализации.

a_time = datetime.now()
print(a_time.strftime('%a'))
2022-11-11 11:12:50.176899 Fri

%A

Полная форма дня недели. Например, Пятница или Friday для пятницы в русской и английской локализации.

A_time = datetime.now()
print(A_time.strftime('%A'))

%b

Сокращенная форма месяца. Например, Ноя и Nov для ноября в русской и английской локализации.

b_time = datetime.now()
temp_date='11 Nov 2022'
today = datetime.strptime(temp_date,'%d %b %Y')

print(today,'\n', b_time.strftime('%b'))

%B

Полная форма месяца. Например, Ноябрь или November для ноября в русской и английской локализации.

temp_date='11 November 2022'
today = datetime.strptime(temp_date,'%d %B %Y')

print(today)

%c

Код следующего шаблона: (сокращенный день недели) (сокращенное название месяца) (день месяца) (часы:минуты:секунды) (год).

c_time = datetime.now()
temp = datetime.strptime('Mon Nov 7 14:25:10 2022', '%c')

print(c_time.strftime('%c'), '\n', temp)
Fri Nov 11 11:30:00 2022 
2022-11-07 14:25:10

%d

d_time = datetime.now()
print(d_time.strftime('%d'))

%H

Часы в 24-часовом формате от 0 до 23.

H_time = datetime.now()
print(H_time.strftime('%H'))

%I

Часы в 12-часовом формате от 1 до 12.

I_time = datetime.now()
print(I_time.strftime('%I'))

%j

Порядковый номер дня в году от 1 до 366.

j_time = datetime.now()

print(j_time.strftime('%j'))

%m

m_time = datetime.now()

print(m_time.strftime('%m'))

%M

M_time = datetime.now()

print(M_time.strftime('%M'))

%p

Код используется вместе с 12-часовым форматом для обозначения времени до полудня и после.

p_time = datetime.now()

print(p_time.strftime('%I%p'))

%S

S_time = datetime.now()

print(S_time.strftime('%S'))

%U

Порядковый номер недели в году от 0 до 52. Нулевая неделя начинается с воскресенья.

U_time = datetime.now()

print(U_time.strftime('%U'))

%w

Порядковый номер дня недели. Воскресенье — 0, суббота — 6.

w_time = datetime.now()

print(w_time.strftime('%w'))

%W

Порядковый номер недели в году. Нулевая неделя начинается с понедельника, а не с воскресенья, как в %U .

W_time = datetime.now()

print(W_time.strftime('%W'))

%x

temp_time = datetime.strptime('11/10/22', '%x')

print(temp_time)

%X

X_time = datetime.now()

print(X_time.strftime('%X'))

%y

y_time = datetime.now()

print(y_time.strftime('%y'))

%Y

Y_time = datetime.now()

print(Y_time.strftime('%Y'))

%Z

Временная зона, при наличии.

%%

temp_time = datetime.strptime('10%11%22', '%d%%%m%%%y')

print(temp_time)

Работа с локальными обозначениями

Для работы с локальными обозначениями, например Декабрь вместо December, можно использовать библиотеку locale:

import locale
locale.setlocale(locale.LC_ALL, 'ru_RU')

current_time = datetime.now()

print(current_time.strftime('%A'))

При использовании этой библиотеки для русскоязычных обозначений важно помнить, что библиотека locale не обрабатывает склонения месяцев и дней. Любые названия должны быть в именительном падеже.

Заключение

В рамках этого материала мы рассмотрели работу методов strptime() и strftime() в Python. Это отличные инструменты для работы с датами и временем. Если вы хотите глубже изучить работу этих методов, то для своей исследовательской деятельности вы можете арендовать облачный сервер в timeweb.cloud.

Источник

Функция strftime() в Python

Функция strftime() в Python присутствует в модулях datetime и time для создания строкового представления на основе указанной строки формата.

    Функция strftime() модуля datetime и функция strftime() модуля time ведут себя точно так же. Однако их синтаксис немного отличается. Синтаксис функции strftime() модуля datetime Python следующий:

datetime_object.strftime (format_str)
time.strftime (format_str [, time_object])
datetime_object.strftime(format_str)
time.strftime(format_str[, time_object])

Директивы

В следующей таблице перечислены наиболее часто используемые директивы форматирования, которые можно использовать в строке формата.

% а День недели, как сокращенное название локали. Вс, пн,…, сб (en_US) итак, пн,…, сб (de_DE)
% А День недели, как полное название локали. Воскресенье, понедельник,…, суббота (en_US) Воскресенье, понедельник,…, суббота (de_DE)
%w День недели в виде десятичного числа, где 0 – воскресенье, а 6 – суббота. 0, 1, 2, 3, 4, 5, 6
% d День месяца в виде десятичного числа с нулями. 01, 02,…, 31
% b Месяц, как сокращенное название языкового стандарта. Янв, Фев,…, Дек (en_US) Янв, Фев,…, Дес (de_DE)
% B Месяц, как полное название локали. Январь, Февраль,…, Декабрь (en_US) Январь, Февраль,…, Дезембер (de_DE)
% m Месяц, как десятичное число с нулями. 01, 02… 12
%and Год без века, как десятичное число с нулями. 01, 02,… 99
%And Год со столетием в виде десятичного числа. 0001, 0002,…, 9999
%H Час (в 24-часовом формате), как десятичное число с нулями. 01, 02,…, 23
%I Час (12-часовой формат), как десятичное число с нулями. 01, 02,…, 12
%p Локальный эквивалент AM или PM. AM, PM (en_US) am, pm (de_DE)
% M Минута в виде десятичного числа с нулями. 01, 02,…, 59
% S Второй – десятичное число с нулями. 01, 02,…, 59
% f Микросекунда в виде десятичного числа с нулями слева. 000000, 000001,…, 999999 Не применяется с модулем времени.
%z Смещение UTC в виде ± ЧЧММ [SS]. (пусто), +0000, -0400, +1030
%Z Имя часового пояса. (пусто), UTC, IST, CST
% j День года в виде десятичного числа с нулями. 001, 002,…, 366
% U Номер недели в году (воскресенье, как первый день недели) в виде десятичного числа, дополненного нулями. Все дни нового года, предшествующие первому воскресенью, считаются нулевой неделей. 00, 01,…, 53
Номер недели в году (понедельник, как первый день недели) в виде десятичного числа. Все дни нового года, предшествующие первому понедельнику, считаются нулевой неделей. 00, 01,…, 53
% c Соответствующее представление даты и времени для локали. Вт 16 августа 21:30:00 1988 (en_US) Вс 16 августа 21:30:00 1988 (de_DE)
%x Соответствующее представление даты языкового стандарта. 16.08.1988 (Нет) 16.08.1988 (en_US) 16.08.1988 (de_DE)
%X Соответствующее временное представление локали. 21:30:00 (en_US) 21:30:00 (de_DE)
%% Буквальный символ «%». %

Примеры использования strftime()

Модуль datetime

Давайте рассмотрим несколько примеров использования функции strftime() с модулем datetime.

import datetime dt = datetime.datetime.now() print('DateTime in Default Formatting:', dt) print('Formatted DateTime', dt.strftime("%m/%d/%y %H:%M:%S")) print("Current year:", dt.strftime("%Y")) print("Month of year:", dt.strftime("%B")) print("Week number of the year:", dt.strftime("%W")) print("Weekday of the week:", dt.strftime("%w")) print("Day of year:", dt.strftime("%j")) print("Day of the month:", dt.strftime("%d")) print("Day of week:", dt.strftime("%A"))
DateTime in Default Formatting: 2018-09-17 12:10:48.081992 Formatted DateTime 09/17/18 12:10:48 Current year: 2018 Month of year: September Week number of the year: 38 Weekday of the week: 1 Day of year: 260 Day of the month: 17 Day of week: Monday

Модуль time

import time seconds = time.time() t = time.localtime(seconds) print('Time struct_time object:', t) print('Time object with pre-defined formatting:', time.asctime(t)) print('Formatted Time:', time.strftime("%m/%d/%y %H:%M:%S", t)) print("Current year:", time.strftime("%Y", t)) print("Month of year:", time.strftime("%B", t)) print("Week number of the year:", time.strftime("%W", t)) print("Weekday of the week:", time.strftime("%w", t)) print("Day of year:", time.strftime("%j", t)) print("Day of the month:", time.strftime("%d", t)) print("Day of week:", time.strftime("%A", t))

Часовой пояс

Мы знаем, что объект datetime по умолчанию не имеет информации о часовом поясе, давайте посмотрим, что будет на выходе, если мы попытаемся распечатать его часовой пояс.

print("TimeZone:", dt.strftime("%Z"))

Посмотрим на результат с объектом модуля времени.

print("TimeZone:", time.strftime("%Z", t))

Мы можем использовать модуль pytz для создания объекта datetime, учитывающего часовой пояс.

import pytz utc = pytz.utc dt = datetime.datetime.now(utc) print("TimeZone:", dt.strftime("%Z"))

Источник

Оцените статью