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

Форматирование описывает, как значения даты/времени должны считываться и записываться из/в строковое представление. На форматирование и синтаксический анализ (парсинг) дат также влияют локаль и часовой пояс.

В OneBridge используется указание префикса для форматирования данных. Доступны два встроенных механизма обработки данных: стандартный для языка Rust модуль (описан в таблицах ниже) и международный формат ISO 8601 (https://en.wikipedia.org/wiki/ISO_8601).

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

Для указания даты:

СпецификаторПримерОписание
%Y2001

Полный год пролептического1 григорианского календаря, дополненный нулями до 4 цифр. Поддерживаются годы от -262144 до 262143. Годы до 1 г. до н.э. или после 9999 г. н.э. требуют начального знака (+/-).

%C20

Год, разделенный на 100, дополненный нулями до 2 цифр2.

%y01

Год, по модулю 100, дополненный нулями до 2 цифр2.

%m07Номер месяца (01–12), дополненный нулями до 2 цифр.
%bJulСокращенное название месяца. Всегда 3 буквы.
%BJulyПолное название месяца. Также принимает соответствующую аббревиатуру при парсинге данных.
%hJulТо же, что %b
%d08Номер дня (01–31), дополненный нулями до 2 цифр.
%e 8То же, что %d, но дополнено пробелами.
%aSunСокращенное название дня недели. Всегда 3 буквы.
%ASundayПолное название дня недели. Также принимает соответствующую аббревиатуру при парсинге.
%w0Числовое обозначение дня недели. Sunday = 0, Monday = 1, …, Saturday = 6.
%u7Числовое обозначение дня недели. Monday = 1, Tuesday = 2, …, Sunday = 7. (ISO 8601)
%U28

Номер недели, начинающийся с воскресенья (00–53), дополненный нулями до 2 цифр3.

%W27То же, что и %U, но неделя 1 начинается с первого понедельника этого года.
%G2001

То же, что %Y, но использует номер года в недельном календаре ISO 86014.

%g01

То же, что %y, но использует номер года в недельном календаре ISO 86014.

%V27

То же, что и %U, но использует номер недели в недельном календаре ISO 8601 (01–53)4.

%j256День года (001–366), дополненный нулями до 3 цифр.
%D07/08/01Формат `месяц-день-год`. То же, что %m/%d/%y.
%x07/08/01Представление даты в локали (например, 31.12.99).
%F2001-07-08Формат `год-месяц-день` (ISO 8601). То же, что %Y-%m-%d.
%v8-Jul-2001Формат `день-месяц-год`. То же, что %e-%b-%Y.
1

Пролептический григорианский календарь (предваряющий григорианский календарь, от др.-греч. πρόληψις «предвосхищение») — календарь, расширяющий григорианский календарь на период до его введения 15 октября 1582 года.

2

%C, %y разделяют года по группам, поэтому для 100 г. до н.э. (номер года -99) будут напечатаны -1 и 99 соответственно.

3

%U: Неделя 1 начинается с первого воскресенья этого года. Неделя 0 может быть указана за несколько дней до первого воскресенья.

4

%G, %g, %V: неделя 1 — это первая неделя, в которой в этом году содержится не менее 4 дней. Недели 0 не существует, поэтому ее следует использовать с %G или %g.

Для указания времени:

СпецификаторПримерОписание
%H00Количество часов (00–23), дополненное нулями до 2 цифр.
%k 0То же, что %H, но дополнено пробелами. То же, что %_H.
%I12Количество часов в 12-часовом формате (01–12), дополненное нулями до 2 цифр.
%l12То же, что %I, но дополнено пробелами. То же, что %_I.
%Pamam или pm в 12-часовом формате.
%pAMAM или PM в 12-часовом формате.
%M34Количество минут (00–59), дополненное нулями до 2 цифр.
%S60

Количество секунд (00–60), дополненное нулями до двух цифр5.

%f

26490000

Количество наносекунд с последней целой секунды6.
%.f

.026490

Доля секунды. Съедает ведущую точку6.
%.3f.026Доля секунды с фиксированной длиной 3.
%.6f.026490Доля секунды с фиксированной длиной 6.
%.9f.026490000Доля секунды с фиксированной длиной 9.
%3f026Доля секунды, как %.3f, но без начальной точки.
%6f026490Доля секунды, как %.6f, но без начальной точки.
%9f026490000Доля секунды, как %.9f, но без начальной точки.
%R00:34Формат `час-минута`. То же, что %H:%M.
%T00:34:60Формат `час-минута-секунда`. То же, что %H:%M:%S.
%X00:34:60Представление местного времени (например, 23:13:48).
%r12:34:60 AM12-часовое местное время. (например, 23:11:04). Возвращает %X, если языковой стандарт не поддерживает 12-часовой формат времени.
5

%S: учитываются дополнительные секунды, поэтому возможно 60.

6

%f, %.f:
%f и %.f — это совершенно разные спецификаторы форматирования.
%f подсчитывает количество наносекунд, прошедших с последней целой секунды, а %.f — доли секунды. Пример: 7 мкс форматируется как 7000 с %f и форматируется как .000007 с %.f.

Для указания часового пояса:

СпецификаторПримерОписание
%ZACST

Название местного часового пояса. Пропускает все символы без пробелов во время парсинга. Идентичен %:z при форматировании7.

%z+0930Смещение местного времени по отношению к UTC (при этом UTC равно +0000).
%:z+09:30То же, что %z, но с двоеточием.
%::z+09:30:00Смещение от местного времени до UTC в секундах.
%:::z+09Смещение от местного времени до UTC без учета минут.
%#z+09Только при парсинге: то же, что и %z, но позволяет использовать или не использовать минуты.
7

%Z: поскольку встроенный модуль не знает часовых поясов за пределами их смещений, этот спецификатор печатает смещение только при использовании для форматирования. Аббревиатура часового пояса НЕ будет напечатана.
Смещение не будет заполнено из проанализированных данных и не будет проверено. Часовой пояс полностью игнорируется.
Невозможно надежно преобразовать аббревиатуру в смещение, например, CDT может означать либо центральное летнее время (Северная Америка), либо летнее время Китая.

Для указания даты и времени:

СпецификаторПримерОписание
%cSun Jul 8 00:34:60 2001Дата и время региона (например, четверг, 3 марта, 23:05:25 2005 г.).
%+2001-07-08T00:34:60.026490+09:30

Формат даты и времени ISO 8601/RFC 33398.

%s994518299

Временная метка UNIX, количество секунд, прошедших с 01.01.1970 00:00 UTC9.

8

%+: То же, что %Y-%m-%dT%H:%M:%S%.f%:z, т. е. 0, 3, 6 или 9 дробных цифр для секунд после двоеточия в смещении часового пояса.
Этот формат также поддерживает использование Z или UTC вместо %:z. Они эквивалентны +00:00.
Обратите внимание, что все T, Z и UTC анализируются без учета регистра.
Типичные реализации функции для преобразования даты и времени имеют разные (и зависящие от локали) форматы этого спецификатора. Лучше избегать этого спецификатора, если вы хотите точно контролировать результат.

9

%s: значение может быть отрицательным. Учитываются только невисокосные секунды.

Специальные спецификаторы:

СпецификаторПримерОписание
%tЗнак табуляции (\t).
%nЗнак перевода строки (\n).
%%Знак процента.