Формат даты и времени
Форматирование описывает, как значения даты/времени должны считываться и записываться из/в строковое представление. На форматирование и синтаксический анализ (парсинг) дат также влияют локаль и часовой пояс.
В OneBridge используется указание префикса для форматирования данных. Доступны два встроенных механизма обработки данных: стандартный для языка Rust модуль (описан в таблицах ниже) и международный формат ISO 8601 (https://en.wikipedia.org/wiki/ISO_8601).
Следующие спецификаторы доступны как для форматирования, так и для синтаксического анализа.
Спецификатор | Пример | Описание |
---|---|---|
%Y | 2001 |
Полный год пролептического1 григорианского календаря, дополненный нулями до 4 цифр. Поддерживаются годы от -262144 до 262143. Годы до 1 г. до н.э. или после 9999 г. н.э. требуют начального знака (+/-). |
%C | 20 |
Год, разделенный на 100, дополненный нулями до 2 цифр2. |
%y | 01 |
Год, по модулю 100, дополненный нулями до 2 цифр2. |
%m | 07 | Номер месяца (01–12), дополненный нулями до 2 цифр. |
%b | Jul | Сокращенное название месяца. Всегда 3 буквы. |
%B | July | Полное название месяца. Также принимает соответствующую аббревиатуру при парсинге данных. |
%h | Jul | То же, что %b |
%d | 08 | Номер дня (01–31), дополненный нулями до 2 цифр. |
%e | 8 | То же, что %d, но дополнено пробелами. |
%a | Sun | Сокращенное название дня недели. Всегда 3 буквы. |
%A | Sunday | Полное название дня недели. Также принимает соответствующую аббревиатуру при парсинге. |
%w | 0 | Числовое обозначение дня недели. Sunday = 0, Monday = 1, …, Saturday = 6. |
%u | 7 | Числовое обозначение дня недели. Monday = 1, Tuesday = 2, …, Sunday = 7. (ISO 8601) |
%U | 28 |
Номер недели, начинающийся с воскресенья (00–53), дополненный нулями до 2 цифр3. |
%W | 27 | То же, что и %U, но неделя 1 начинается с первого понедельника этого года. |
%G | 2001 |
То же, что %Y, но использует номер года в недельном календаре ISO 86014. |
%g | 01 |
То же, что %y, но использует номер года в недельном календаре ISO 86014. |
%V | 27 |
То же, что и %U, но использует номер недели в недельном календаре ISO 8601 (01–53)4. |
%j | 256 | День года (001–366), дополненный нулями до 3 цифр. |
%D | 07/08/01 | Формат `месяц-день-год`. То же, что %m/%d/%y. |
%x | 07/08/01 | Представление даты в локали (например, 31.12.99). |
%F | 2001-07-08 | Формат `год-месяц-день` (ISO 8601). То же, что %Y-%m-%d. |
%v | 8-Jul-2001 | Формат `день-месяц-год`. То же, что %e-%b-%Y. |
Пролептический григорианский календарь (предваряющий григорианский календарь, от др.-греч. πρόληψις «предвосхищение») — календарь, расширяющий григорианский календарь на период до его введения 15 октября 1582 года.
%C
, %y
разделяют года по группам, поэтому для 100 г. до н.э. (номер года -99) будут напечатаны -1 и 99 соответственно.
%U
: Неделя 1 начинается с первого воскресенья этого года. Неделя 0 может быть указана за несколько дней до первого воскресенья.
%G
, %g
, %V
: неделя 1 — это первая неделя, в которой в этом году содержится не менее 4 дней. Недели 0 не существует, поэтому ее следует использовать с %G
или %g
.
Спецификатор | Пример | Описание |
---|---|---|
%H | 00 | Количество часов (00–23), дополненное нулями до 2 цифр. |
%k | 0 | То же, что %H, но дополнено пробелами. То же, что %_H. |
%I | 12 | Количество часов в 12-часовом формате (01–12), дополненное нулями до 2 цифр. |
%l | 12 | То же, что %I, но дополнено пробелами. То же, что %_I. |
%P | am | am или pm в 12-часовом формате. |
%p | AM | AM или PM в 12-часовом формате. |
%M | 34 | Количество минут (00–59), дополненное нулями до 2 цифр. |
%S | 60 |
Количество секунд (00–60), дополненное нулями до двух цифр5. |
%f |
26490000 | Количество наносекунд с последней целой секунды6. |
%.f |
.026490 | Доля секунды. Съедает ведущую точку6. |
%.3f | .026 | Доля секунды с фиксированной длиной 3. |
%.6f | .026490 | Доля секунды с фиксированной длиной 6. |
%.9f | .026490000 | Доля секунды с фиксированной длиной 9. |
%3f | 026 | Доля секунды, как %.3f, но без начальной точки. |
%6f | 026490 | Доля секунды, как %.6f, но без начальной точки. |
%9f | 026490000 | Доля секунды, как %.9f, но без начальной точки. |
%R | 00:34 | Формат `час-минута`. То же, что %H:%M. |
%T | 00:34:60 | Формат `час-минута-секунда`. То же, что %H:%M:%S. |
%X | 00:34:60 | Представление местного времени (например, 23:13:48). |
%r | 12:34:60 AM | 12-часовое местное время. (например, 23:11:04). Возвращает %X, если языковой стандарт не поддерживает 12-часовой формат времени. |
%S
: учитываются дополнительные секунды, поэтому возможно 60.
%f, %.f
:
%f
и %.f
— это совершенно разные спецификаторы форматирования.
%f
подсчитывает количество наносекунд, прошедших с последней целой секунды, а %.f
— доли секунды. Пример: 7 мкс форматируется как 7000 с %f
и форматируется как .000007 с %.f
.
Спецификатор | Пример | Описание |
---|---|---|
%Z | ACST |
Название местного часового пояса. Пропускает все символы без пробелов во время парсинга. Идентичен %:z при форматировании7. |
%z | +0930 | Смещение местного времени по отношению к UTC (при этом UTC равно +0000). |
%:z | +09:30 | То же, что %z, но с двоеточием. |
%::z | +09:30:00 | Смещение от местного времени до UTC в секундах. |
%:::z | +09 | Смещение от местного времени до UTC без учета минут. |
%#z | +09 | Только при парсинге: то же, что и %z, но позволяет использовать или не использовать минуты. |
%Z
: поскольку встроенный модуль не знает часовых поясов за пределами их смещений, этот спецификатор печатает смещение только при использовании для форматирования. Аббревиатура часового пояса НЕ будет напечатана.
Смещение не будет заполнено из проанализированных данных и не будет проверено. Часовой пояс полностью игнорируется.
Невозможно надежно преобразовать аббревиатуру в смещение, например, CDT
может означать либо центральное летнее время (Северная Америка), либо летнее время Китая.
Спецификатор | Пример | Описание |
---|---|---|
%c | Sun Jul 8 00:34:60 2001 | Дата и время региона (например, четверг, 3 марта, 23:05:25 2005 г.). |
%+ | 2001-07-08T00:34:60.026490+09:30 |
Формат даты и времени ISO 8601/RFC 33398. |
%s | 994518299 |
Временная метка UNIX, количество секунд, прошедших с 01.01.1970 00:00 UTC9. |
%+
: То же, что %Y-%m-%dT%H:%M:%S%.f%:z
, т. е. 0, 3, 6 или 9 дробных цифр для секунд после двоеточия в смещении часового пояса.
Этот формат также поддерживает использование Z
или UTC
вместо %:z
. Они эквивалентны +00:00
.
Обратите внимание, что все T
, Z
и UTC
анализируются без учета регистра.
Типичные реализации функции для преобразования даты и времени имеют разные (и зависящие от локали) форматы этого спецификатора. Лучше избегать этого спецификатора, если вы хотите точно контролировать результат.
%s
: значение может быть отрицательным. Учитываются только невисокосные секунды.
Спецификатор | Пример | Описание |
---|---|---|
%t | Знак табуляции (\t). | |
%n | Знак перевода строки (\n). | |
%% | Знак процента. |