Что такое код strftime


Что такое код strftime

Формат представляет собой строку с null в конце, в которой могут содержаться специальные символьные последовательности, называемые определителями преобразования, каждая из которых состоит из символа ‘%’ и ещё одного символа, называемого символом определителя преобразования. Все остальные символьные последовательности являются обычными символьными последовательностями.

Символы из обычных символьных последовательностей (включая байт null) копируются как есть из format в s. Символы из определителей преобразования заменяются следующем образом:

%a Аббревиатура названия дня недели в зависимости от текущей локали. %A Полное название дня недели в зависимости от текущей локали. %b Аббревиатура названия месяца в зависимости от текущей локали. %B Полное название месяца в зависимости от текущей локали. %c Предпочтительный формат даты и времени для текущей локали. %C Век (год/100) как целое двухразрядное число. (SU) %d День месяца в десятичной форме (от 01 до 31). %D Эквивалентно %m/%d/%y (только для американцев, в других странах обычная форма — %d/%m/%y. Это означает, что международный контекст этого формата сомнителен и лучше этот формат не использовать). (SU) %e То же, что и %d: десятичное число, обозначающее номер дня месяца, но вместо начального нуля ставится пробел. (SU) %E Модификатор: использовать другой формат, смотрите далее. (SU) %F Эквивалентно %Y-%m-%d (формат даты согласно ISO 8601). (C99) %G Год на основе недель с веком в виде десятичного числа, согласно ISO 8601 (смотрите ЗАМЕЧАНИЯ). Год как четырехзначное число, соответствующее номер недели ISO (смотрите %V). Это тот же формат и значение, что и %Y, но если номер недели ISO входит также в прошедший или последующий год, то в этом случае отображается прошедший год. (TZ) %g То же, что и %G, но без века, то есть двухразрядное число года (00-99). (TZ) %h Эквивалентно %b. (SU) %H Час как десятичное число в 24-часовых часах (от 00 до 23). %I Час как десятичное число в 12-часовых часах (от 01 до 12). %j День года в виде десятичного числа (от 001 до 366). %k Час (24-часовые часы) в виде десятичного числа (от 0 до 23); цифры предваряются пробелом (смотрите также %H). (TZ) %l Час (12-часовые часы) в виде десятичного числа (от 1 до 12); цифры предваряются пробелом (смотрите также %l). (TZ) %m Месяц в виде десятичного числа (от 01 до 12). %M Минута в виде десятичного числа (от 00 до 59). %n Символ новой строки. (SU) %O Модификатор: использовать другой формат, смотрите далее. (SU) %p Или «AM» или «PM», в соответствии со значением времени, или соответствующая строка из текущей локали. Полдень считается как «PM», а полночь как «AM». %P Подобно %p но в нижнем регистре: «am» или «pm» или соответствующая строка из текущей локали. (GNU) %r Время в формате с a.m. или p.m. notation. В локали POSIX это эквивалентно %I:%M:%S %p. (SU) %R Время в 24-часовом формате (%H:%M). (SU) Версия с секундами описана для %T далее. %s Количество секунд, которое прошло с начала эпохи, 1970-01-01 00:00:00 +0000 (UTC). (TZ) %S Секунда в виде десятичного числа (от 00 до 60) (диапазон до 60 включительно позволяет учитывать високосные секунды). %t Символ табуляции. (SU) %T Время в 24-часовом формате (%H:%M:%S). (SU) %u День недели в цифровом формате (от 1 до 7), понедельник это 1. Смотрите также %w. (SU) %U Номер недели текущего года в виде десятичного числа (от 00 до 53), начиная с первого воскресенья как первого дня недели 01. Смотрите также %V и %W. %V Номер недели согласно ISO 8601 (смотрите ЗАМЕЧАНИЯ) в текущем году в виде десятичного числа (от 01 до 53), где неделя 1 это первая неделя, минимум 4 дня которой находятся в новом году. Смотрите также %U и %W. (SU) %w День недели в цифровом формате (от 0 до 6), воскресенье это 0. Смотрите также %u. %W Номер недели текущего года в виде десятичного числа (от 00 до 53), начиная с первого понедельника как первого дня недели 01. %x Предпочтительный формат даты без времени для текущей локали. %X Предпочтительный формат времени без даты для текущей локали. %y Год без века в виде десятичного числа (от 00 до 99). %Y Год с веком в виде десятичного числа. %z Числовой часовой пояс +hhmm или -hhmm (то есть смещение часов и минут относительно UTC). (SU) %Z Название или сокращение часового пояса. %+ Дата и время в формате date(1). (TZ) (не поддерживается в glibc2) %% Символ ‘%’.

Некоторые определения преобразования могут быть изменены с помощью указания перед символом определителя преобразования модификатора E или O, который указывает на необходимость использования альтернативного формата. Если альтернативный формат или определение не существует в текущей локали, то поведение будет таким же как если бы проводилось не изменённое преобразование. (SU) В Single UNIX Specification упомянуты %Ec, %EC, %Ex, %EX, %Ey, %EY, %Od, %Oe, %OH, %OI, %Om, %OM, %OS, %Ou, %OU, %OV, %Ow, %OW, %Oy, где модификатор O означает использование альтернативных численных символов (например, римские цифры), а модификатор E отражает альтернативное представление, зависящее от текущей локали.

Структура времени tm в виде компонент определена в . Смотрите также ctime(3).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Заметим, что возвращаемое значение 0 не всегда означает ошибку. Например, во многих локалях %p представляет собой пустую строку. Пустая строка format считается пустой строкой.

strftime

Она сохраняет время и дату вместе с другой информацией в строке, на которую указывает параметр str, в формате, который задается с помощью строки, определяемой указателем fmt. В качестве исходного высту­пает время, заданное в параметре time. В строку str будет помещено не более maxsize символов.

Функция strftime() работает подобно функции sprintf() в том отношении, что она распознает набор команд форматирования, которые начинаются со знака процента (%). Команды формати­рования используются для задания точного способа отображения информации о времени и дате в переменной str. Все остальные символы, которые содержатся в строке форматирования, помещают­ся в str без изменения. На экран выводится локальное время и дата. Команды форматирования показаны в таблице 14.1. Надо обратить внимание, что многие команды чувствительны к регистру.

Функция strftime() возвращает число символов, помещенных в строку str, либо же 0 — в случае возникновения ошибки.

функция strftime () в C / C ++

strftime () — это функция в C, которая используется для форматирования даты и времени. Он входит в заголовочный файл time.h, который также содержит структуру с именем struct tm, которая используется для хранения времени и даты. Синтаксис strftime () показан ниже:

Функция strftime () форматирует разбитое время tm в соответствии с правилами форматирования, указанными в формате, и сохраняет его в массиве символов s.

Некоторые спецификаторы формата для strftime () показаны следующим образом:
% x = предпочтительное представление даты
% I = Час в виде десятичного числа (12-часовые часы).
% M = Десятичные числа в диапазоне от 00 до 59.
% p = «AM» или «PM» в соответствии с заданным значением времени и т. д.
% a = сокращенное название дня недели
% A = полное название дня недели
% b = сокращенное название месяца
% B = полное название месяца март
% c = дата и время представления
% d = день месяца (01-31)
% H = час в 24-часовом формате (00-23)
% I = час в 12-часовом формате (01-12)
% j = день года (001-366)
% m = месяц как десятичное число (01-12)
% M = минута (00-59)

Структура struct tm определяется в time.h следующим образом:

strftime

strftime — форматирует локальные дату/время в соответствии с локальными установками.

Описание

string strftime (string format [, int timestamp])

Возвращает строку, отформатированную в соответствии с заданной строкой формата с использованием timestamp или текущего локального времени, если timestamp не задан. Имена month и weekday и другие зависимые от языка строки соотносятся с текущей локализацией через setlocale().

В строке формата распознаются следующие спецификаторы конвертации:

%a — сокращённое имя weekday в соответствии с текущей locale

%A — полное имя weekday в соответствии с текущей locale

%b — сокращённое имя month в соответствии с текущей locale

%B — полное имя month в соответствии с текущей locale

%c — предпочтительное представление даты и времени для текущей locale

%C — число столетий (год, разделённый на 100 и усечённый до integer, в диапазоне 00 — 99)

%d — число месяца как 10-ричное число (диапазон 01 — 31)

%D — то же , что %m/%d/%y

%e — число месяца как 10-ричное число, одиночная цифра имеет перед собой пробел (диапазон ‘1’ — ’31’)

%g — как %G, но без столетия

%G — год из 4 цифр, соответствующий ISO-номеру недели (см. %V). Имеет тот же формат и значение, что и %Y, но, если ISO week number принадлежит предыдущему или следующему году, используется тот год.

%h — то же, что и %b

%H — часы как 10-ричное число (диапазон 00 — 23)

%I — часы как 10-ричное число с использованием 12-часового циферблата (диапазон 01 — 12)


%j — день года как 10-ричное число (диапазон 001 — 366)

%m — month как 10-ричное число (диапазон 01 — 12)

%M — минуты как 10-ричное число

%n — символ newline

%p — ‘am’ или ‘pm’ в соответствии с заданным значением времени, либо соответствующие строки для текущей locale

%r — время в нотации a.m. и p.m.

%R — время в 24-часовой нотации

%S — секунды как 10-ричное число

%T — текущее время, равное %H:%M:%S

%u — день недели как 10-ричное число [1,7], где 1 это Monday

Sun Solaris начинает неделю с Sunday как 1, хотя ISO 9889:1999 (текущий стандарт C) ясно указывает, что это должен быть Monday.

%U — номер недели текущего года как 10-ричное число, начиная с Sunday как первого дня первой недели

%V — ISO 8601:1988 номер недели текущего года как 10-ричное число, диапазон 01 — 53, где week 1 это первая неделя, имеющая как минимум 4 дня в текущем году, а Monday это первый день недели. (Используйте %G или %g для компонента year, соответствующие номеру недели для специфицированного .)

%W — номер недели текущего года как 10-ричное число, начиная с Monday как первого дня первой недели

%w — день недели как 10-ричное число, Sunday как 0

%x — предпочтительное представление даты для текущей locale без времени

%X — предпочтительное представление времени для текущей locale без даты

%y — год как 10-ричное число без столетий (диапазон 00 — 99)

%Y — год как 10-ричное число, включая столетия

%Z — часовой пояс, имя или аббревиатура

Примечание: не все виды специфицированной конвертации могут поддерживаться вашей библиотекой C, и в этом случае они не будут поддерживаться РНР-функцией strftime(). Это означает, что %T и %D не будут работать в Windows.

Пример 1. strftime()

Этот пример работает, если вы имеете соответствующие локализации/locales, установленные в вашей системе.

Python 3 – Время. Метод strptime()

Описание

Параметр format использует те же директивы, что и strftime(); по умолчанию равен “%a %b %d %H:%M:%S %Y”, который соответствует форматированию, возвращаемому ctime().

Если строка не может быть проанализирована в соответствии с форматом или если она имеет избыточные данные после разбора, то выведется ошибка ValueError.

Синтаксис

Ниже приводится синтаксис для метода strptime():

Параметры

  • string – это время в строчном формате, которое будет обрабатываться на основе данного формата.
  • format – это директива, которая будет использоваться для синтаксического анализа данной строки.

Директива

Следующие директивы могут быть встроены в строку формата:


  • %a – сокращенное название дня недели
  • %A – полное название рабочего дня
  • %b – название сокращенного месяца
  • %B – полное название месяца
  • %c – предпочтительное представление даты и времени
  • %C – номер столетия (год, деленный на 100, диапазон от 00 до 99)
  • %d – день месяца (с 01 по 31)
  • %D – то же, что и %m/%d/%y
  • %e – день месяца (от 1 до 31)
  • %g – как %G, но без столетия
  • %G – 4-значный год, соответствующий номеру недели ISO (см.%V).
  • %h – то же, что и %b
  • %H – час, используя 24-часовые часы (от 00 до 23)
  • %I – час, используя 12-часовые часы (от 01 до 12)
  • %j – день года (001-336)
  • %м – месяц (с 01 по 12)
  • %M – минута
  • %n – символ новой строки
  • %p – либо am или pm согласно заданному значению времени
  • %r – время в часах am и pm
  • %R – время в 24-часовой обозначении
  • %S – секунда
  • %t – символ табуляции
  • %T – текущее время, равное %H:%M:%S
  • %u – будний день как число (от 1 до 7), понедельник = 1. Внимание: в Sun Solaris Sunday = 1
  • %U – номер недели текущего года, начиная с первого воскресенья в качестве первого дня первой недели
  • %V – номер недели ISO 8601 текущего года (с 01 по 53), где 1 неделя – первая неделя, которая имеет не менее 4 дней в текущем году, а с понедельника в качестве первого дня недели
  • %W – номер недели текущего года, начиная с первого понедельника в качестве первого дня первой недели
  • %w – день недели как десятичная, воскресенье = 0
  • %x – предпочтительное представление даты без времени
  • %X – предпочтительное представление времени без даты
  • %y – год без столетия (диапазон от 00 до 99)
  • %Y – год, включая столетие
  • %Z или%z – часовой пояс или имя или аббревиатура
  • %%- литеральный символ%

Возвращаемое значение

Возвращаемое значение – struct_time, возвращаемое gmtime() или localtime().

Пример

В следующем примере показано использование метода strptime().

Результат

Когда мы запускаем указанную выше программу, она выдаст следующий результат:

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Запретить `strftime` в базе кода

Я хочу убедиться, что ни один разработчик в нашей кодовой базе не сможет проверить код, использующий strftime . Это очень полезный метод, но так как он не может использоваться до 1900 года , это постоянный источник ошибок, которые мы обнаруживаем только после запуска кода.

Я подумал о нескольких способах сделать это так, чтобы его нельзя было использовать:

Создайте проверку в Intellij, которая выдает ошибку при обнаружении strftime .

(Кажется, все в порядке, но создание проверок Intellij — большая проблема.)

Создайте юнит-тест, который фиксирует любые изменения, которые в данный момент находятся в коде, и гарантирует, что strftime не вернется обратно.

(кажется хакерским и добавляет зависимость для некоторого инструмента git.)

Создайте git-хук какого-то вида, который взрывается, когда strftime появляется в коммите.

(Посмотрите на это, но git-хуки должны быть вручную символьными, что побеждает точку — вид.)

Подкласс модуля datetime с реализацией, которая вызывает NotImplemented ошибка, если когда-либо используется strftime .

(Но люди все еще могут импортировать обычный модуль datetime.)

Просто научи себя и всех остальных тому, что это дьявол.

(Но пока это не сработало.)

Я чувствую, что это, вероятно, стандартное решение. Есть предложения?

4 ответа

Другой подход заключается в использовании pylint для lint ваш код. В частности, basic_checker может использоваться для предупреждения при использовании запрещенных функций (по умолчанию для карты, фильтра и т. д.).

Вы можете связать это как pre-commit в разделе git , чтобы гарантировать, что функция-нарушитель не используется.

Еще один подход заключается в del time.strftime в некотором коде запуска.

Он сможет проверить это, но всегда будет выдавать AttributeError при доступе.

Представьте их классу wx.DateTime из wxPython — как только они к этому привыкнут, вам понадобится пистолет, чтобы заставить их использовать strftime — это статический класс, поэтому его можно использовать без остальной части цепочка инструментов wx , и вам не нужно wx.App перед его использованием.

  • Широкий диапазон: диапазон поддерживаемых дат составляет от 4714 до н.э. . до 480 миллионов лет в будущем.
  • Точность: отсутствие вычислений с плавающей запятой нигде не гарантирует, что вычисления дат не пострадают от ошибок округления.
  • Множество функций: поддерживаются не только все обычные вычисления с датами, но и более экзотические вычисления дня недели и года, тестирование рабочего дня, стандартные астрономические функции, преобразование в или из строк в строгом или свободном формате.
  • Эффективность: объекты wxDateTime имеют небольшой размер (8 байт), и работа с ними выполняется быстро
  • DST осведомлен в некоторых часовых поясах.

Вот вариант (4). Я не обязательно уверен, что это лучший способ сделать это, но он будет работать. Поместите это в верхний уровень __init__.py , который работает раньше всего:

Это позволит обезопасить встроенную реализацию datetime.datetime от вашей взломанной версии. Важно понимать, что это также нарушит все ваши зависимости, которые могут использовать datetime.strftime() , поэтому тестируйте перед развертыванием .

РЕДАКТИРОВАТЬ: Я не уверен, что это будет работать, но вы можете злоупотребить системой предупреждений Python, чтобы обойти проблему зависимости. Начните с изменения вашей реализации на это:

Это выдаст предупреждение об устаревании при каждом вызове функции. Предупреждения об устаревании по умолчанию игнорируются, поэтому это не создаст ложных срабатываний для Django. Затем вы можете установить фильтр предупреждений следующим образом:

Теоретически этот фильтр должен вызывать исключения только для кода внутри your_package . На практике я не проверял его, поэтому он может не вызывать никаких исключений.


Что такое код strftime

(PHP 3, PHP 4, PHP 5)

strftime — Форматирует текущую дату/время с учетом текущей локали

Описание string strftime ( string format [, int timestamp] )

Возвращает строку, отформатированную в соответствии с аргументом format , используя аргумент timestamp или текущее системное время, если этот аргумент не передан. Названия месяцев, дней недели и другие строки, зависящие от языка, соответствуют текущей локали, установленной функцией setlocale() .

В форматирующей строке распознаются следующие символы:

%a — сокращенное название дня недели в текущей локали

%A — полное название дня недели в текущей локали

%b — сокращенное название месяца недели в текущей локали

%B — полное название месяца недели в текущей локали

%c — предпочтительный формат даты и времени в текущей локали

%C — столетие (год, деленный на 100 и огругленный до целого, от 00 до 99)

%d — день месяца в виде десятичного числа (от 01 до 31)

%D — аналогично %m/%d/%y

%e — день месяца в виде десятичного числа, если это одна цифра, то перед ней добавляется пробел (от ‘ 1′ до ’31’)

%g — подобно %G, но без столетия.

%G — Год, 4-значное число, соответствующее номеру недели по ISO (см. %V). Аналогично %Y, за исключением того, что если номер недели по ISO соответствует предыдущему или следующему году, используется соответствующий год.

%h — аналогично %b

%H — номер часа от 00 до 23

%I — номер часа от 01 до 12

%j — номер дня в году (от 001 до 366)

%m — номер месяца (от 01 до 12)

%p — `am’ или `pm’, или соответствующие строки в текущей локали

%r — время в формате a.m. или p.m.

%R — время в 24-часовом формате

%t — символ табуляции («\t»)

%T — текущее время, аналогично %H:%M:%S

%u — номер дня недели от 1 до 7, где 1 соответствует понедельнику

Предупреждение!

На Sun Solaris 1 соответствует воскресенью, хотя в ISO 9889:1999 (текущий стандарт языка C) явно указано, что это должен быть понедельник.

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

%V — Порядковый номер недели в году по стандарту ISO 8601:1988 от 01 до 53, где 1 соответствует первой неделе в году, в которой как минимум 4 дня принадлежат этому году. Первым днем недели считается понедельник. (Используйте %G or %g для определения соответствующего года)

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

%w — номер дня недели, 0 соответствует воскресенью

%x — предпочтительный формат даты без времени в текущей локали

%X — предпочтительный формат времени без даты в текущей локали

%y — год без столетия (от 00 до 99)


%Y — год, включая столетие

%Z — временная зона в виде смещения, аббривеатуры или полного наименования

Замечание: strftime() использует функции операционной системы, поэтому отдельные форматирующие символы могут не работать в вашей операционной системе. Кроме того, не все платформы поддерживают отрицательные метки времени support negative timestamps. Это значит, что %e, %T, %R и %D (а возможно и другие) и даты до Jan 1, 1970 не поддерживаются Windows, некоторыми версиями Linux и некоторыми другими операционными системами. Список форматирующих символов, поддерживаемых Windows, можно найти на сайте MSDN .

Пример 1. Пример использования функции strftime() с разными локалями

Внимание
( LC_TIME , «C» );
echo strftime ( «%A» );
setlocale ( LC_TIME , «fi_FI» );
echo strftime ( » по-фински — %A,» );
setlocale ( LC_TIME , «fr_FR» );
echo strftime ( » по-французски — %A и» );
setlocale ( LC_TIME , «de_DE» );
echo strftime ( » по-немецки — %A.\n» );
?>

Этот пример будет работать, если на вашей системе установлены соответствующие локали.

Замечание: %G and %V, которые основаны на номере недели по ISO 8601:1988, Могут давать результат, отличный от ожидаемого, если вы не полностью понимаете систему нумерации, используемую этим стандартом. Смотрите описание %V выше и следующий пример.

Пример 2. Пример номеров недели по ISO 8601:1988

/* Декабрь 2002 / Январь 2003
ISO Пн Вт Ср Чт Пт Сб Вс
—— —————————-
51 16 17 18 19 20 21 22
52 23 24 25 26 27 28 29
1 30 31 1 2 3 4 5
2 6 7 8 9 10 11 12
3 13 14 15 16 17 18 19 */

// Вывод: 12/28/2002 — %V,%G,%Y = 52,2002,2002
echo «12/28/2002 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «12/28/2002» )) . «\n» ;

// Вывод: 12/30/2002 — %V,%G,%Y = 1,2003,2002
echo «12/30/2002 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «12/30/2002» )) . «\n» ;

// Вывод: 1/3/2003 — %V,%G,%Y = 1,2003,2003
echo «1/3/2003 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «1/3/2003» )) . «\n» ;

// Вывод: 1/10/2003 — %V,%G,%Y = 2,2003,2003
echo «1/10/2003 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «1/10/2003» )) . «\n» ;

/* Декабрь 2004 / Январь 2005
ISO Пн Вт Ср Чт Пт Сб Вс
—— —————————-
51 13 14 15 16 17 18 19
52 20 21 22 23 24 25 26
53 27 28 29 30 31 1 2
1 3 4 5 6 7 8 9
2 10 11 12 13 14 15 16 */

// Вывод: 12/23/2004 — %V,%G,%Y = 52,2004,2004
echo «12/23/2004 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «12/23/2004» )) . «\n» ;

// Вывод: 12/31/2004 — %V,%G,%Y = 53,2004,2004
echo «12/31/2004 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «12/31/2004» )) . «\n» ;

// Вывод: 1/2/2005 — %V,%G,%Y = 53,2004,2005
echo «1/2/2005 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «1/2/2005» )) . «\n» ;

// Вывод: 1/3/2005 — %V,%G,%Y = 1,2005,2005
echo «1/3/2005 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «1/3/2005» )) . «\n» ;

strftime — Форматирует текущую дату/время с учетом текущих настроек локали

(PHP 4, PHP 5, PHP 7)

strftime — Форматирует текущую дату/время с учетом текущих настроек локали

Описание

Форматирует дату/время с учетом текущих настроек локали. Названия месяцев, дней недели и других языко-зависимых строк будут взяты в соответствии с текущими настройками локали, установленной с помощью функции setlocale() .

Ваша C-библиотека может не поддерживать все форматирующие параметры, в этом случае они будут недоступны функции strftime() . Кроме того, не все платформы поддерживают отрицательные метки времени, так что поддерживаемый диапазон дат на этих платформах будет ограничен Эпохой Unix. Это значит, что %e, %T, %R и %D (а возможно и другие параметры), как и даты до Jan 1, 1970, не поддерживаются Windows, некоторыми версиями Linux и некоторыми другими операционными системами. Список форматирующих символов, поддерживаемых Windows, можно найти на » сайте MSDN .

Список параметров

Распознаются следующие символы в строке format

format Описание Пример возвращаемых значений
День
%a Сокращенное название дня недели От Sun до Sat
%A Полное название дня недели От Sunday до Saturday
%d Двухзначное представление дня месяца (с ведущими нулями) От 01 до 31
%e День месяца, с ведущим пробелом, если он состоит из одной цифры. На Windows реализован не так, как описано. Подробнее смотрите ниже. От 1 до 31
%j Порядковый номер в году, 3 цифры с ведущими нулями От 001 до 366
%u Порядковый номер дня недели согласно стандарту ISO-8601 От 1 (понедельник) до 7 (воскресенье)
%w Порядковый номер дня недели От (воскресенье) до 6 (суббота)
Неделя
%U Порядковый номер недели в указанном году, начиная с первого воскресенья в качестве первой недели 13 (для полной 13-й недели года)
%V Порядковый номер недели в указанном году в соответствии со стандартом ISO-8601:1988, счет начинается с той недели, которая содержит минимум 4 дня, неделя начинается с понедельника От 01 до 53 (где 53 указывает на перекрывающуюся неделю)
%W Порядковый номер недели в указанном году, начиная с первого понедельника в качестве первой недели 46 (для 46-й недели года, начинающейся с понедельника)
Месяц
%b Аббревиатура названия месяца, в соответствии с настройками локали От Jan до Dec
%B Полное название месяца, в соответствии с настройками локали От January до December
%h Аббревиатура названия месяца, в соответствии с настройками локали (псевдоним %b) От Jan до Dec
%m Двухзначный порядковый номер месяца От 01 (январь) до 12 (декабрь)
Год
%C Двухзначный порядковый номер столетия (год, деленный на 100, усеченный до целого) 19 для 20-го века
%g Двухзначный номер года в соответствии со стандартом ISO-8601:1988 (см. %V) Пример: 09 для недели 6 января 2009
%G Полная четырехзначная версия %g Пример: 2008 для недели 3 января 2009
%y Двухзначный порядковый номер года Пример: 09 для 2009, 79 для 1979
%Y Четырехзначный номер года Пример: 2038
Время
%H Двухзначный номер часа в 24-часовом формате От 00 до 23
%k Двухзначное представление часа в 24-часовом формате, с пробелом перед одиночной цифрой От до 23
%I Двухзначный номер часа в 12-часовом формате От 01 до 12
%l (строчная ‘L’) Час в 12-часовом формате, с пробелом перед одиночной цифрой От 1 до 12
%M Двухзначный номер минуты От 00 до 59
%p ‘AM’ или ‘PM’ в верхнем регистре, в зависимости от указанного времени Пример: AM для 00:31, PM для 22:23
%P ‘am’ или ‘pm’ в зависимости от указанного времени Пример: am для 00:31, pm для 22:23
%r Тоже что и «%I:%M:%S %p» Пример: 09:34:17 PM для 21:34:17
%R Тоже что и «%H:%M» Пример: 00:35 для 12:35 AM, 16:44 для 4:44 PM
%S Двухзначный номер секунды От 00 до 59
%T Тоже что и «%H:%M:%S» Пример: 21:34:17 для 09:34:17 PM
%X Предпочитаемое отображение времени в зависимости от локали, без даты Example: 03:59:16 or 15:59:16
%z Смещение временной зоны относительно UTC. Не реализовано в Windows, подробности см. ниже. Пример: -0500 для US Eastern Time
%Z Аббревиатура временной зоны. Не реализовано в Windows, подробности см. ниже. Пример: EST для Eastern Time
Метки даты и времени
%c Предпочитаемое отображение даты и времени, в зависимости от текущей локали Пример: Tue Feb 5 00:45:10 2009 для 5 февраля 2009 00:45:10
%D Тоже что и «%m/%d/%y» Пример: 02/05/09 для 5 февраля 2009
%F Тоже что и «%Y-%m-%d» (обычно используется в метках времени баз данных) Пример: 2009-02-05 для 5 февраля 2009
%s Метка времени Эпохи Unix (тоже что и функция time() ) Пример: 305815200 для 10 сентября 1979 08:40:00
%x Предпочитаемое отображение даты, без времени Пример: 02/05/09 для 5 февраля 2009
Различное
%n Символ перевода строки («\n»)
%t Символ табуляции («\t»)
%% Символ процента («%»)

Максимальной длиной данного параметра является 1023 символа.

В отличие от ISO-9899:1999, в Sun Solaris воскресенью присваивается номер 1. Как результат, %u может работать не так, как описано в этом руководстве.

Только для Windows:

Модификатор %e не поддерживается в реализации этой функции в Windows. Для использования этого значения необходимо вместо него использовать модификатор %#d. Пример ниже иллюстрирует кроссплатформенно совместимую функцию.

Модификаторы %z и %Z возвращают название временной зоны вместо смещения или аббревиатуры.

Только для Mac OS X: модификатор %P не поддерживается в реализации этой функции в Mac OS X.

Необязательный параметр timestamp представляет собой integer метку времени, по умолчанию равную текущему локальному времени, если timestamp не указан. Другими словами, значение по умолчанию равно результату функции time() .

Возвращаемые значения

Возвращает строку, отформатированную в соответствии с параметром format , используя указанную временную метку timestamp или текущее время, если метка не была указана. Названия месяцев, дней недели и других языкозависимых строк будут взяты в соответствии с текущими настройками локали, установленной с помощью функции setlocale() .

Ошибки


Каждый вызов к функциям даты/времени при неправильных настройках временной зоны сгенерирует ошибку уровня E_NOTICE , и/или ошибку уровня E_STRICT или E_WARNING при использовании системных настроек или переменной окружения TZ . Смотрите также date_default_timezone_set()

Из-за того что результат данной функции зависит от используемой в операционной системе C-библиотеки, некоторые модификаторы могут не поддерживаться. Передача неизвестного модификатора в функцию в Windows выдаст 5 предупреждений E_WARNING и вернет FALSE . На других операционных системах вы можете не получить никаких предупреждений E_WARNING , а вывод может содержать модификаторы без преобразований.

Список изменений

Теперь ошибки, связанные с временными зонами, генерируют ошибки уровня E_STRICT и E_NOTICE .

Примеры

Этот пример будет работать, если на вашей системе установлены соответствующие локали.

Пример #1 Пример использования функции strftime() с разными локалями

Пример #2 Пример номеров недели по ISO 8601:1988

/* Декабрь 2002 / Январь 2003
ISOнед Пн Вт Ср Чт Пт Сб Вс
—— —————————-
51 16 17 18 19 20 21 22
52 23 24 25 26 27 28 29
1 30 31 1 2 3 4 5
2 6 7 8 9 10 11 12
3 13 14 15 16 17 18 19 */

// Вывод: 12/28/2002 — %V,%G,%Y = 52,2002,2002
echo «12/28/2002 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «12/28/2002» )) . «\n» ;

// Вывод: 12/30/2002 — %V,%G,%Y = 1,2003,2002
echo «12/30/2002 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «12/30/2002» )) . «\n» ;

// Вывод: 1/3/2003 — %V,%G,%Y = 1,2003,2003
echo «1/3/2003 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «1/3/2003» )) . «\n» ;

// Вывод: 1/10/2003 — %V,%G,%Y = 2,2003,2003
echo «1/10/2003 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «1/10/2003» )) . «\n» ;

/* Декабрь 2004 / Январь 2005
ISOнед Пн Вт Ср Чт Пт Сб Вс
—— —————————-
51 13 14 15 16 17 18 19
52 20 21 22 23 24 25 26
53 27 28 29 30 31 1 2
1 3 4 5 6 7 8 9
2 10 11 12 13 14 15 16 */

// Вывод: 12/23/2004 — %V,%G,%Y = 52,2004,2004
echo «12/23/2004 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «12/23/2004» )) . «\n» ;

// Вывод: 12/31/2004 — %V,%G,%Y = 53,2004,2004
echo «12/31/2004 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «12/31/2004» )) . «\n» ;

// Вывод: 1/2/2005 — %V,%G,%Y = 53,2004,2005
echo «1/2/2005 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «1/2/2005» )) . «\n» ;

// Вывод: 1/3/2005 — %V,%G,%Y = 1,2005,2005
echo «1/3/2005 — %V,%G,%Y = » . strftime ( «%V,%G,%Y» , strtotime ( «1/3/2005» )) . «\n» ;

Пример #3 Кроссплатформенный пример использования модификатора %e

// 1 января: выдает результат: ‘%e%1%’ (%%, e, %%, %e, %%)
$format = ‘%%e%%%e%%’ ;

// Проверяем наличие Windows и соответственно заменяем модификатор %e
if ( strtoupper ( substr ( PHP_OS , 0 , 3 )) == ‘WIN’ ) <
$format = preg_replace ( ‘#(? , ‘\1%#d’ , $format );
>

echo strftime ( $format );
?>

Пример #4 Показываем все известные и неизвестные форматы.

// Описание форматов.
$strftimeFormats = array(
‘A’ => ‘Полное название дня’ ,
‘B’ => ‘Полное имя месяца, в зависимости от локали’ ,
‘C’ => ‘Двухзначный номер столетия (год, деленный на 100, усеченный до целого)’ ,
‘D’ => ‘Тоже что и «%m/%d/%y»‘ ,
‘E’ => » ,
‘F’ => ‘Тоже что и «%Y-%m-%d»‘ ,
‘G’ => ‘Четырехзначная версия %g’ ,
‘H’ => ‘Двухзначный номер часа в 24-часовом формате’ ,
‘I’ => ‘Двухзначный номер часа в 12-часовом формате’ ,
‘J’ => » ,
‘K’ => » ,
‘L’ => » ,
‘M’ => ‘Двухзначный номер минуты’ ,
‘N’ => » ,
‘O’ => » ,
‘P’ => ‘»am» или «pm» в зависимости от текущего времени, в нижнем регистре’ ,
‘Q’ => » ,
‘R’ => ‘Тоже что и «%H:%M»‘ ,
‘S’ => ‘Двухзначный номер секунды’ ,
‘T’ => ‘Тоже что и «%H:%M:%S»‘ ,
‘U’ => ‘Номер недели указанного года, начиная с первого воскресенья в качестве первой недели’ ,
‘V’ => ‘Порядковый номер недели в указанном году в соответствии со стандартом ISO-8601:1988, счет начинается с той недели, которая содержит минимум 4 дня, неделя начинается с понедельника’ ,
‘W’ => ‘Номер недели указанного года, начиная с первого понедельника в качестве первой недели’ ,
‘X’ => ‘Предпочитаемое отображение времени в зависимости от локали, без даты’ ,
‘Y’ => ‘Четырехзначный номер года’ ,
‘Z’ => ‘Смещение временной зоны/аббревиатура, НЕ выдаваемая %z (зависит от операционной системы)’ ,
‘a’ => ‘Сокращенное название дня недели’ ,
‘b’ => ‘Сокращенное название месяца в зависимости от локали’ ,
‘c’ => ‘Предпочитаемое отображение даты и времени в зависимости от локали’ ,
‘d’ => ‘Двухзначный номер дня месяца (с ведущими нулями)’ ,
‘e’ => ‘День месяца, с ведущим пробелом, если он состоит из одной цифры’ ,
‘f’ => » ,
‘g’ => ‘Двухзначный номер года в соответствии со стандартом ISO-8601:1988 (см. %V)’ ,
‘h’ => ‘Сокращенное название месяца в зависимости от локали (псевдоним %b)’ ,
‘i’ => » ,
‘j’ => ‘Номер дня в году, 3 цифры с ведущими нулями’ ,
‘k’ => ‘Час в 24-часовом формате, с ведущим пробелом перед одиночной цифрой’ ,
‘l’ => ‘Номер часа в 12-часовом формате, с ведущим пробелом, если он состоит из одной цифры’ ,
‘m’ => ‘Двухзначный номер месяца’ ,
‘n’ => ‘Символ новой строки («\n»)’ ,
‘o’ => » ,
‘p’ => ‘»AM» или «PM» в зависимости от указанного времени, в верхнем регистре’ ,
‘q’ => » ,
‘r’ => ‘Тоже что и «%I:%M:%S %p»‘ ,
‘s’ => ‘Временная метка Эпохи Unix’ ,
‘t’ => ‘Символ табуляции («\t»)’ ,
‘u’ => ‘Номер дня недели в соответствии со стандартом ISO-8601’ ,
‘v’ => » ,
‘w’ => ‘Номер дня недели’ ,
‘x’ => ‘Предпочитаемое отображение даты в зависимости от локали, без времени’ ,
‘y’ => ‘Двухзначный номер года’ ,
‘z’ => ‘Смещение временной зоны относительно UTC или аббревиатура (зависит от операционной системы)’ ,
‘%’ => ‘Символ процента («%»)’ ,
);

// Результаты.
$strftimeValues = array();

// Обрабатываем форматы и подавляем любые ошибки.
foreach( $strftimeFormats as $format => $description ) <
if ( False !== ( $value = @ strftime ( «% < $format >» ))) <
$strftimeValues [ $format ] = $value ;
>
>

// Находим самое длинное значение
$maxValueLength = 2 + max ( array_map ( ‘strlen’ , $strftimeValues ));

// Отображаем известные форматы.
foreach( $strftimeValues as $format => $value ) <
echo «Известный формат : ‘ < $format >‘ = » , str_pad ( «‘ < $value >‘» , $maxValueLength ), » ( < $strftimeFormats [ $format ]>)\n» ;
>

// Отображаем неизвестные форматы.
foreach( array_diff_key ( $strftimeFormats , $strftimeValues ) as $format => $description ) <
echo «Неизвестный формат : ‘ < $format >‘ » , str_pad ( ‘ ‘ , $maxValueLength ), ( $description ? » ( < $description >)» : » ), «\n» ;
>
?>

Результатом выполнения данного примера будет что-то подобное:

Работа с датой и временем в Python

Python содержит несколько инструментов, которые разработчик может использовать для работы с датой и временем. В данном разделе статье мы рассмотрим модули datetime и time. Мы изучим принципы их работы и способы их применения. Начнем с модуля datetime.

Модуль datetime

Мы изучим следующие классы модуля:

  • datetime.date
  • datetime.timedelta
  • datetime.datetime


Благодаря этим классам мы в будущем сможем работать с большей частью случаев, в которых нам понадобятся объекты date и datetime. Также существует класс tzinfo, который применяется для работы с часовыми поясами. Для дополнительной информации об этом классе вы можете обратиться к документации Python.

datetime.date

Python может представлять даты различными способами. Для начала, рассмотрим формат datetime.date, так как это один из самых простых объектов date.

В данном коде показано, как создать простой объект даты. Класс date принимает три аргумента: год, месяц и день. Если вы укажите неправильное значение, вы увидите ошибку ValueError, как в случае выше. В противном случае вы увидите, что объект datetime.date вернулся. Давайте взглянем на еще один пример:

Здесь мы присваиваем объекту date переменную d. Теперь мы можем получить доступ к различным компонентам даты по названиям, таким как d.year или d.month. Давайте посмотрим, какой сейчас день:

Это может быть полезно, когда вам нужно записать, какой сейчас день. Или, если вам нужно выполнить основанный на сегодняшней дате расчет. Мелочь, а приятно.

datetime.datetime

Объект datetime.datetime содержит всю информацию объектов datetime.date плюс datetime.time. Давайте приведем несколько примеров, для лучшего понимания разницы между этим объектом, и объектом datetime.date.

Мы видим, что datetime.datetime принимает несколько дополнительных аргументов: год, месяц, день, час, минута и секунда. Это также позволяет вам указывать информацию о микросекундах и часовом поясе. При работе с базами данных, данные типы объектов будут использоваться достаточно часто. Большую часть вашей работы, вам нужно будет конвертировать форматы date или datetime Python в форматы SQL datetime или timestamp. Обратите внимание на то, что today совместно с datetime.datetime использует два разных метода:

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

Первый пример – это скорее хитрость. В нем показано, как конвертировать сегодняшний объект datetime в строку, следующую за форматом YYYYMMDD (ГГГГММДД). Второй пример более наглядный.

В нем мы присваиваем объект datetime переменной под названием today и применяем два разных параметра форматирования строки. Первый параметр добавляет косые черточки между элементами datetime, а также перегруппировывает datetime, теперь он делится на месяц, день и год. В последнем примере мы создаем временную отметку, которая следует типичному формату: YYYY-MM-DD.HH.MM.SS. Если вам нужно указать год как двухзначный (“YY”), вы можете заменить %Y на %y.

datetime.timedelta

Объект datetime.timedelta отображает длительность времени. Другими словами, это разница между двумя датами или временными отметками. Давайте взглянем на наглядный пример:

Мы создали два объекта datetime. Один указывает на сегодняшний день, второй – на прошедшую неделю. После этого, мы берем разницу между ними. Это возвращает объект timedelta, который мы можем далее использовать, чтобы выяснить, сколько прошло дней или секунд, между этими двумя датами. Если вам нужно узнать количество часов или минут между двумя датами, вам понадобится немножко математики, чтобы выяснить это. Давайте взглянем на проверенный способ:

Отсюда мы узнаем, что в неделе 186 часов и 13 минут. Обратите внимание на то, что мы используем двойную косую черту в качестве нашего оператора деления, также известного как floor division. Теперь мы готовы к тому, чтобы узнать больше о модуле time Python.

Модуль time

Модуль time открывает разработчику Python доступ к нескольким связанным со временем функциям. Модуль основан на «эпохе», точке, с которой начинается время. Для систем Unix, эпоха началась в 1970 году. Чтобы узнать, какая эпоха в вашей системе, попробуйте запустить следующий код:

Я запустил его на Windows 7, которая также уверена в том, что начало времен датируется 1970м годом. В любом случае, в данном разделе мы ознакомимся со следующими функциями:

DateTime, TimeDelta, Strftime(Format): дата и время в Python с примерами

Дата публикации: 2020-06-27

От автора: классы date, time и datetime предоставляют ряд функций для работы в Python с датами, временем и временными интервалами. Date и datetime являются объектами Python, поэтому, когда вы манипулируете ими, вы фактически манипулируете объектами, а не строками или временными метками. Всякий раз, когда вы манипулируете датами или временем, вам нужно импортировать функцию datetime.

Классы datetime в Python подразделяются на 5 основных классов.

date — работа с простой датой (месяц, день, год)

time — время, независимое от дня (час, минута, секунда, микросекунда)

datetime — комбинация времени и даты (месяц, день, год, час, секунда, микросекунда)

timedelta — продолжительность времени, используемого для манипулирования датами

tzinfo— абстрактный класс для работы с часовыми поясами

В этом руководстве мы рассмотрим:

Как использовать классы Date и DateTime

Вывод даты с использованием date.today()

Текущая дата и время в Python: now() today()

Как отформатировать дату и время с помощью Strftime()

Как использовать Объекты Timedelta

Как использовать классы Date и DateTime

Шаг 1) Прежде чем запускать код для datetime, важно импортировать модули date time, как показано на скриншоте ниже.


Эти операторы импорта являются предопределенными частями функционала в библиотеке Python, которые позволяют вам манипулировать датами и временем без написания какого-либо кода. Рассмотрим следующее перед выполнением кода даты и времени:

Эта строка сообщает интерпретатору Python, что из модуля datetime импортируется класс date. Мы не пишем код для этого функционала, а просто импортируем его для использования.

Шаг 2) Далее мы создаем экземпляр объекта даты.

Шаг 3) Далее мы выводим дату и запускаем код.

Вывод соответствует ожидаемому.

Вывод даты с использованием date.today()

Функция date.today имеет несколько свойств, связанных с ней. Мы можем вывести отдельно день / месяц / год и многое другое. Давайте рассмотрим пример:

Сегодняшний номер дня недели

Функция date.today() также дает номер дня недели. Вот таблица рабочих дней, которая начинается с понедельника 0 и заканчивается воскресеньем 6.

Номер дня недели полезен для массивов, индекс которых зависит от дня недели.

Текущая дата и время в Python: now() today()

Шаг 1) Как и объекты Date, мы также можем использовать в Python объекты «DATETIME» . Он выдает дату вместе со временем в часах, минутах, секундах и миллисекундах.

Когда мы выполняем код для datetime, он выдает выходные данные с текущей датой и временем.

Шаг 2) С помощью «объекта DATETIME» вы также можете вызвать класс time.

Предположим, мы хотим вывести только текущее время без даты.

Мы импортировали класс time. Мы присваиваем ему текущее значение времени, используя datetime.now(). Мы присваиваем значение текущего времени переменной t. И это даст нам только время. Итак, давайте запустим эту программу.

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

Шаг 3) Мы применим индексатор дня недели к массиву дней недели, чтобы узнать, какой сегодня день.

Оператору дней (wd) присваивается номер (0-6) в зависимости от текущего дня недели. Здесь мы объявили массив списка для дней (Mon, Tue, Wed…Sun). Используйте это значение индекса, чтобы узнать, какой сегодня день. В нашем случае это номер 2, и он представляет среду, поэтому на выходе мы получим «Which is a Wednesday».

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

Как отформатировать дату и время с помощью Strftime()

На данный момент мы узнали, как использовать в Python объекты datetime и date. Теперь мы узнаем, как использовать функцию форматирования времени и даты.

Шаг 1) Сначала мы рассмотрим, как отформатировать год. Вот пример:

Мы использовали для форматирования «функцию strftime».

Эта функция использует другой управляющий код для вывода.

Каждый управляющий код указывает различные параметры, такие как год, месяц, день недели и дата [(%y/%Y – Year), (%a/%A- weekday), (%b/%B- month), (%d — day of month)].

В нашем случае это («%Y»), который указывает год, он выводим полный год с веком (например, 2020).

Шаг 2) Теперь, если вы замените («%Y») на строчные буквы, т. е. («%y») и выполните код, выходные данные будут отображать только (18), а не (2020). Век года не будет отображаться как показано на скриншоте ниже.

Шаг 3) Функция Strf может объявлять отдельно дату, день, месяц и год. Также с небольшими изменениями в управляющем коде функции strftime вы можете отформатировать стиль текста.

Внутри функции strftime, если вы замените (%a) на заглавную A, т. е. (%A), вывод будет «Friday», а не просто «Fri».

Шаг 4) С помощью функции «Strftime» мы также можем получить локальное системное время, дату или и то, и другое.

%C — указывает местную дату и время

%x — указывает местную дату

%X — указывает местное время

В результате вы можете увидеть вывод, как и ожидалось.

Шаг 5) Функция strftime позволяет вам вызывать время в формате 24 часа или 12 часов.

Просто определив управляющий код, %I/H для часов, %M для минут, %S для секунд, можно вызвать время в разных форматах.

Время 12 часов объявляется, как [print now.strftime(«%I:%M:%S %P)].

24 часа объявляется, как [print now.strftime(«%H:%M»)].

Вот полный код для преобразования datetime в объект String.

Илон Маск рекомендует:  Что такое код ncurses_beep
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Версия Описание
5.1.0