Класс DateTimeFormatter
public final class DateTimeFormatter extends Object
Этот класс предоставляет основную точку входа для печати и разбора и предоставляет общие реализации DateTimeFormatter:
- Использование предопределённых констант, таких как
ISO_LOCAL_DATE - Использование символов шаблона, таких как
uuuu-MMM-dd - Использование локальных стилей, таких как
longилиmedium
Более сложные форматировщики предоставляются классом DateTimeFormatterBuilder.
Основные классы даты и времени предоставляют два метода — один для форматирования, format(DateTimeFormatter formatter), и один для разбора, parse(CharSequence text, DateTimeFormatter formatter).
Например:
LocalDate date = LocalDate.now(); String text = date.format(formatter); LocalDate parsedDate = LocalDate.parse(text, formatter);
В дополнение к формату, форматировщики могут быть созданы с желаемой локалью, хронологией, часовым поясом и стилем десятичных знаков.
Метод withLocale возвращает новый форматировщик, который переопределяет локаль. Локаль влияет на некоторые аспекты форматирования и разбора. Например, ofLocalizedDate предоставляет форматировщик, использующий локальный формат даты.
Метод withChronology возвращает новый форматировщик, который переопределяет хронологию. При переопределении значение даты и времени преобразуется в хронологию перед форматированием. При разборе значение даты и времени преобразуется в хронологию перед возвращением.
Метод withZone возвращает новый форматировщик, который переопределяет часовой пояс. При переопределении значение даты и времени преобразуется в ZonedDateTime с запрошенным часовым поясом перед форматированием. При разборе часовой пояс применяется перед возвращением значения.
Метод withDecimalStyle возвращает новый форматировщик, который переопределяет DecimalStyle. Символы DecimalStyle используются для форматирования и разбора.
Некоторые приложения могут нуждаться в использовании более старого класса java.text.Format для форматирования. Метод toFormat() возвращает реализацию java.text.Format.
Предопределённые Форматировщики
| Форматировщик | Описание | Пример |
|---|---|---|
ofLocalizedDate(dateStyle) | Форматировщик со стилем даты из локали | '2011-12-03' |
ofLocalizedTime(timeStyle) | Форматировщик со стилем времени из локали | '10:15:30' |
ofLocalizedDateTime(dateTimeStyle) | Форматировщик со стилем даты и времени из локали | '3 июн 2008 11:05:30' |
ofLocalizedDateTime(dateStyle,timeStyle) | Форматировщик со стилем даты и времени из локали | '3 июн 2008 11:05' |
BASIC_ISO_DATE
| Базовая ISO дата | '20111203' |
ISO_LOCAL_DATE
| ISO Локальная дата | '2011-12-03' |
ISO_OFFSET_DATE
| ISO Дата со смещением | '2011-12-03+01:00' |
ISO_DATE
| ISO Дата со смещением или без него | '2011-12-03+01:00'; '2011-12-03' |
ISO_LOCAL_TIME
| Время без смещения | '10:15:30' |
ISO_OFFSET_TIME
| Время со смещением | '10:15:30+01:00' |
ISO_TIME
| Время со смещением или без него | '10:15:30+01:00'; '10:15:30' |
ISO_LOCAL_DATE_TIME
| ISO Локальная дата и время | '2011-12-03T10:15:30' |
ISO_OFFSET_DATE_TIME
| Дата и время со смещением | '2011-12-03T10:15:30+01:00' |
ISO_ZONED_DATE_TIME
| Зонированное время | '2011-12-03T10:15:30+01:00[Europe/Paris]' |
ISO_DATE_TIME
| Дата и время с часовым поясом | '2011-12-03T10:15:30+01:00[Europe/Paris]' |
ISO_ORDINAL_DATE
| Год и день года | '2012-337' |
ISO_WEEK_DATE
| Год и неделя | '2012-W48-6' |
ISO_INSTANT
| Дата и время момента | '2011-12-03T10:15:30Z' |
RFC_1123_DATE_TIME
| RFC 1123 / RFC 822 | 'Вт, 3 июн 2008 11:05:30 GMT' |
Шаблоны для форматирования и разбора
Шаблоны основаны на простом наборе букв и символов. Шаблон используется для создания форматировщика с помощью методовofPattern(String) и ofPattern(String, Locale). Например, "d MMM uuuu" отформатирует 2011-12-03 как '3 дек 2011'. Форматировщик, созданный из шаблона, может быть использован столько раз, сколько необходимо, он неизменяем и потокобезопасен. Например:
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd");
String text = date.format(formatter);
LocalDate parsedDate = LocalDate.parse(text, formatter);
Все буквы от 'A' до 'Z' и от 'a' до 'z' зарезервированы как символы шаблона. Определены следующие символы шаблона:
| Символ | Значение | Представление | Примеры |
|---|---|---|---|
| G | эра | текст | н. э.; Anno Domini; н. э. |
| u | год | число | 2004; 04 |
| y | год от эры | число | 2004; 04 |
| D | день года | число | 189 |
| M/L | месяц года | число/текст | 7; 07; Июл; Июль; И |
| d | день месяца | число | 10 |
| g | изменённый юлианский день | число | 2451334 |
| Q/q | четверть года | число/текст | 3; 03; Q3; 3-я четверть |
| Y | неделя года | число | 1996; 96 |
| w | неделя в году | число | 27 |
| W | неделя месяца | число | 4 |
| E | день недели | текст | Вт; Вторник; В |
| e/c | локальный день недели | число/текст | 2; 02; Вт; Вторник; В |
| F | выравненная неделя месяца | число | 3 |
| a | время суток (AM/PM) | текст | PM |
| B | период суток | текст | утром |
| h | час в формате AM/PM (1-12) | число | 12 |
| K | час в формате AM/PM (0-11) | число | 0 |
| k | час в формате 24-часов (1-24) | число | 24 |
| H | час в формате 24-часов (0-23) | число | 0 |
| m | минута | число | 30 |
| s | секунда | число | 55 |
| S | дробная часть секунды | дробное число | 978 |
| A | миллисекунда | число | 1234 |
| n | наносекунда | число | 987654321 |
| N | наносекунда | число | 1234000000 |
| V | Идентификатор часового пояса | идентификатор часового пояса | America/Los_Angeles; Z; -08:30 |
| v | Наименование часового пояса | имя часового пояса | Тихоокеанское время; PT |
| z | Наименование часового пояса | имя часового пояса | Тихоокеанское стандартное время; PST |
| O | локальное смещение часового пояса | смещение-O | GMT+8; GMT+08:00; UTC-08:00 |
| X | смещение часового пояса 'Z' для нуля | смещение-X | Z; -08; -0830; -08:30; -083015; -08:30:15 |
| x | смещение часового пояса | смещение-x | +0000; -08; -0830; -08:30; -083015; -08:30:15 |
| Z | смещение часового пояса | смещение-Z | +0000; -0800; -08:00 |
| p | добавить следующее | модификатор добавления | 1 |
| ' | экранирование текста | разделитель | |
| '' | одинарная кавычка | литерал | ' |
| [ | начало необязательной секции | ||
| ] | конец необязательной секции | ||
| # | зарезервировано для будущего использования | ||
| { | зарезервировано для будущего использования | ||
| } | зарезервировано для будущего использования |
Количество символов шаблона определяет формат.
Текст: Стиль текста определяется на основе количества используемых символов шаблона. Менее 4 символов шаблона будут использовать short form. Ровно 4 символа шаблона будут использовать full form. Ровно 5 символов шаблона будут использовать narrow form. Символы шаблона 'L', 'c' и 'q' указывают на автономную форму стилей текста.
Число: Если количество букв равно одному, значение выводится с минимальным количеством цифр без заполнения. В противном случае, количество цифр используется в качестве ширины поля вывода, а значение дополняется нулями по мере необходимости. Следующие символы шаблона имеют ограничения на количество букв. Можно указать только одну букву 'c' и 'F'. До двух букв 'd', 'H', 'h', 'K', 'k', 'm' и 's'. До трёх букв 'D'.
Число/Текст: Если количество символов шаблона равно 3 или больше, используются правила для текста, описанные выше. В противном случае используются правила для чисел, описанные выше.
Дробная часть: Выводит поле наносекунд как дробную часть секунды. Значение наносекунд имеет девять цифр, поэтому количество символов шаблона составляет от 1 до 9. Если оно меньше 9, значение наносекунд усекается, и выводятся только самые значимые цифры.
Год: Количество букв определяет минимальную ширину поля, ниже которой используется заполнение. Если количество букв равно двум, используется форма с двумя цифрами reduced. При выводе выводятся две последние цифры. При разборе используется базовое значение 2000, что приводит к году в диапазоне от 2000 до 2099 включительно. Если количество букв меньше четырёх (но не равно двум), знак выводится только для отрицательных годов, согласно SignStyle.NORMAL. В противном случае знак выводится, если ширина заполнения превышена, согласно SignStyle.EXCEEDS_PAD.
ZoneId: Выводит идентификатор часового пояса, например, 'Europe/Paris'. Если количество букв равно двум, выводится идентификатор часового пояса. Любое другое количество букв приводит к IllegalArgumentException.
Названия часовых поясов: Выводит отображаемое имя идентификатора часового пояса. Если символ шаблона равен 'z', выводится имя часового пояса, учитывающее переходы на летнее время. Если нет достаточной информации для определения применения DST, используется имя, игнорирующее летнее время. Если количество букв равно одному, двум или трём, выводится короткое имя. Если количество букв равно четырём, выводится полное имя. Пять или более букв приводят к IllegalArgumentException.
Если символ шаблона равен 'v', вывод содержит имя часового пояса, игнорирующее переходы на летнее время. Если количество букв равно одному, выводится короткое имя. Если количество букв равно четырём, выводится полное имя. Два, три и пять или более букв приводят к IllegalArgumentException.
Смещение X и x: Форматирует смещение на основе количества символов шаблона. Одна буква выводит только час, например '+01', если минута отлична от нуля, выводится также минута, например '+0130'. Две буквы выводит час и минуту без двоеточия, например '+0130'. Три буквы выводит час и минуту с двоеточием, например '+01:30'. Четыре буквы выводит час, минуту и (необязательные) секунды без двоеточия, например '+013015'. Пять букв выводит час, минуту и (необязательные) секунды с двоеточием, например '+01:30:15'. Шесть или более букв приводят к IllegalArgumentException. Символ шаблона 'X' (заглавная буква) выведет 'Z', если выводимое смещение равно нулю, а символ шаблона 'x' (строчная буква) выведет '+00', '+0000' или '+00:00'.
Смещение O: При ненулевом смещении это форматирует локальное смещение на основе количества символов шаблона. Одна буква выводит сокращённую форму локального смещения, например 'GMT', с часом без ведущего нуля, необязательными 2-значными минутами и секундами, если они не нулевые, и двоеточием, например 'GMT+8'. Четыре буквы выводит полную форму, например 'GMT', с 2-значным часом и минутой, необязательным полем секунды, если оно не нулевое, и двоеточием, например 'GMT+08:00'. Если смещение равно нулю, выводится только локальный текст. Любое другое количество букв приводит к IllegalArgumentException.
Смещение Z: Это форматирует смещение на основе количества символов шаблона. Одна, две или три буквы выводит час и минуту без двоеточия, например '+0130'. Вывод будет '+0000' при смещении ноль. Четыре буквы выводят полную форму локального смещения, эквивалентную четырём буквам смещения O. Вывод будет соответствующим локальным смещением, если смещение равно нулю. Пять букв выводят час, минуту, а необязательные секунды, если они не нулевые, с двоеточием. Выводит 'Z', если смещение равно нулю. Шесть или более букв приводят к IllegalArgumentException.
Необязательная секция: Маркеры необязательной секции работают точно так же, как вызов DateTimeFormatterBuilder.optionalStart() и DateTimeFormatterBuilder.optionalEnd().
Модификатор заполнения: Изменяет шаблон, который следует непосредственно за ним, для заполнения пробелами. Ширина заполнения определяется количеством символов шаблона. Это то же самое, что вызов DateTimeFormatterBuilder.padNext(int).
Например, 'ppH' выводит час суток, заполненный пробелами слева до ширины 2.
Любой нераспознанный символ — ошибка. Любой небуквенный символ, кроме '[', ']', '{', '}', '#', и одинарной кавычки, будет выведен напрямую. Несмотря на это, рекомендуется использовать одинарные кавычки вокруг всех символов, которые вы хотите вывести напрямую, чтобы гарантировать, что будущие изменения не повредят ваше приложение.
Разрешение
Разбор реализован как двухфазный процесс. Сначала текст анализируется с использованием структуры, определённой форматировщиком, создаваяMap из поля в значение, ZoneId и Chronology. Во-вторых, проанализированные данные разрешаются путём проверки, объединения и упрощения различных полей в более полезные. Этот класс предоставляет пять методов разбора. Четыре из них выполняют как фазы разбора, так и разрешения. Пятый метод, parseUnresolved(CharSequence, ParsePosition), выполняет только первую фазу, оставляя результат неразрешённым. Таким образом, это по существу операция низкого уровня.
Фаза разрешения контролируется двумя параметрами, заданными в этом классе.
ResolverStyle — перечисление, которое предлагает три различных подхода: строгий, интеллектуальный и снисходительный. Интеллектуальный вариант является по умолчанию. Его можно установить с помощью withResolverStyle(ResolverStyle).
Параметр withResolverFields(TemporalField...) позволяет отфильтровать набор полей, которые будут разрешены, прежде чем начнется разрешение. Например, если форматировщик проанализировал год, месяц, число и день года, то существует два способа разрешить дату: (год + месяц + число) и (год + день года). Параметр разрешающих полей позволяет выбрать один из двух подходов. Если поля разрешения не заданы, оба подхода должны привести к одной и той же дате.
Разрешение отдельных полей для формирования полной даты и времени — сложный процесс с поведением, распределённым по нескольким классам. Он выполняет следующие шаги:
- Определяется хронология. Хронология результата — либо хронология, которая была проанализирована, либо, если хронология не была проанализирована, это хронология, заданная в этом классе, или, если она равна null, это
IsoChronology. - Разрешаются поля даты
ChronoField. Это достигается с помощьюChronology.resolveDate(Map, ResolverStyle). Документация по разрешению полей находится в реализацииChronology. - Разрешаются поля времени
ChronoField. Это документировано вChronoFieldи одинаково для всех хронологий. - Обрабатываются любые поля, которые не являются
ChronoField. Это достигается с помощьюTemporalField.resolve(Map, TemporalAccessor, ResolverStyle). Документация по разрешению полей находится в реализацииTemporalField. - Поля даты и времени
ChronoFieldпереразрешаются. Это позволяет полям на шаге четыре создаватьChronoFieldзначения и обрабатывать их в даты и время. - Формируется
LocalTime, если доступен хотя бы час. Это включает предоставление значений по умолчанию для минуты, секунды и дробной части секунды. - Любые оставшиеся неразрешённые поля проверяются на соответствие любой дате и/или времени, которое было разрешено. Таким образом, на предыдущем этапе разрешение (год + месяц + число) к дате, и на этом этапе проверяется, что день недели действителен для даты.
- Если был проанализирован лишний номер дней, он добавляется к дате, если дата доступна.
- Если присутствует поле, основанное на секундах, но
LocalTimeне было проанализировано, то решатель гарантирует, что значения милли, микро и наносекунд доступны, чтобы соответствовать контрактуChronoField. Они будут установлены в ноль, если отсутствуют. - Если были проанализированы и дата, и время, и присутствует смещение или часовой пояс, создаётся поле
ChronoField.INSTANT_SECONDS. Если было проанализировано смещение, смещение будет объединено сLocalDateTimeдля формирования момента, а любой часовой пояс игнорируется. Если был проанализированZoneIdбез смещения, часовой пояс будет объединён сLocalDateTimeдля формирования момента в соответствии с правиламиChronoLocalDateTime.atZone(ZoneId). ЕслиZoneIdбыл проанализирован из имени часового пояса, указывающего, включено ли летнее время или нет, то этот факт будет использован для выбора правильного смещения на перекрытии временных линий.
- Требования к реализации:
- Этот класс неизменяемый и потокобезопасный.
- С:
- 1.8
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final DateTimeFormatter |
BASIC_ISO_DATE |
Форматтер дат ISO, который форматирует или анализирует дату без смещения, например '20111203'. |
static final DateTimeFormatter |
ISO_DATE |
Форматтер дат ISO, который форматирует или анализирует дату со смещением, если оно доступно, например '2011-12-03' или '2011-12-03+01:00'. |
static final DateTimeFormatter |
ISO_DATE_TIME |
Форматтер дат и времени, похожий на ISO, который форматирует или анализирует дату и время со смещением и часовым поясом, если они доступны, например '2011-12-03T10:15:30', '2011-12-03T10:15:30+01:00' или '2011-12-03T10:15:30+01:00[Europe/Paris]'. |
static final DateTimeFormatter |
ISO_INSTANT |
Форматтер моментов ISO, который форматирует или анализирует мгновение времени в UTC, например '2011-12-03T10:15:30Z'. |
static final DateTimeFormatter |
ISO_LOCAL_DATE |
Форматтер дат ISO, который форматирует или анализирует дату без смещения, например '2011-12-03'. |
static final DateTimeFormatter |
ISO_LOCAL_DATE_TIME |
Форматтер дат и времени ISO, который форматирует или анализирует дату и время без смещения, например '2011-12-03T10:15:30'. |
static final DateTimeFormatter |
ISO_LOCAL_TIME |
Форматтер времени ISO, который форматирует или анализирует время без смещения, например '10:15' или '10:15:30'. |
static final DateTimeFormatter |
ISO_OFFSET_DATE |
Форматтер дат ISO, который форматирует или анализирует дату со смещением, например '2011-12-03+01:00'. |
static final DateTimeFormatter |
ISO_OFFSET_DATE_TIME |
Форматтер дат и времени ISO, который форматирует или анализирует дату и время со смещением, например '2011-12-03T10:15:30+01:00'. |
static final DateTimeFormatter |
ISO_OFFSET_TIME |
Форматтер времени ISO, который форматирует или анализирует время со смещением, например '10:15+01:00' или '10:15:30+01:00'. |
static final DateTimeFormatter |
ISO_ORDINAL_DATE |
Форматтер дат ISO, который форматирует или анализирует порядковый номер даты без смещения, например '2012-337'. |
static final DateTimeFormatter |
ISO_TIME |
Форматтер времени ISO, который форматирует или анализирует время со смещением, если оно доступно, например '10:15', '10:15:30' или '10:15:30+01:00'. |
static final DateTimeFormatter |
ISO_WEEK_DATE |
Форматтер дат ISO, который форматирует или анализирует дату по неделе без смещения, например '2012-W48-6'. |
static final DateTimeFormatter |
ISO_ZONED_DATE_TIME |
Форматтер дат и времени, похожий на ISO, который форматирует или анализирует дату и время со смещением и часовым поясом, например '2011-12-03T10:15:30+01:00[Europe/Paris]'. |
static final DateTimeFormatter |
RFC_1123_DATE_TIME |
Форматтер дат и времени RFC-1123, например 'Tue, 3 Jun 2008 11:05:30 GMT'. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
String |
format |
Форматирует объект DateTime с помощью этого форматтера. |
void |
formatTo |
Форматирует объект DateTime в Appendable с помощью этого форматтера. |
Chronology |
getChronology() |
Возвращает переопределенную хронологию, которая будет использоваться во время форматирования. |
DecimalStyle |
getDecimalStyle() |
Возвращает DecimalStyle, который будет использоваться во время форматирования. |
Locale |
getLocale() |
Возвращает локаль, которая будет использоваться во время форматирования. |
Set |
getResolverFields() |
Возвращает поля разрешения, которые будут использоваться во время анализа. |
ResolverStyle |
getResolverStyle() |
Возвращает стиль разрешения, который будет использоваться во время анализа. |
ZoneId |
getZone() |
Возвращает переопределенный часовой пояс, который будет использоваться при форматировании. |
DateTimeFormatter |
localizedBy |
Возвращает копию этого форматтера с локализованными значениями локали, календаря, региона, десятичного стиля и/или часового пояса, которые переопределяют значения в этом форматтере. |
static DateTimeFormatter |
ofLocalizedDate |
Возвращает формат даты, специфичный для локали, для хронологии ISO. |
static DateTimeFormatter |
ofLocalizedDateTime |
Возвращает формат дат и времени, специфичный для локали, для хронологии ISO. |
static DateTimeFormatter |
ofLocalizedDateTime |
Возвращает формат даты и времени, специфичный для локали, для хронологии ISO. |
static DateTimeFormatter |
ofLocalizedPattern |
Создаёт форматтер, специфичный для локали, на основе запрошенной шаблона для хронологии ISO. |
static DateTimeFormatter |
ofLocalizedTime |
Возвращает формат времени, специфичный для локали, для хронологии ISO. |
static DateTimeFormatter |
ofPattern |
Создаёт форматтер, используя указанный шаблон. |
static DateTimeFormatter |
ofPattern |
Создаёт форматтер, используя указанный шаблон и локаль. |
TemporalAccessor |
parse |
Полностью анализирует текст, создавая временный объект. |
TemporalAccessor |
parse |
Анализирует текст, используя этот форматтер, предоставляя контроль над позицией текста. |
<T> T |
parse |
Полностью анализирует текст, создавая объект указанного типа. |
TemporalAccessor |
parseBest |
Полностью анализирует текст, создавая объект одного из указанных типов. |
static final TemporalQuery |
parsedExcessDays() |
Запрос, предоставляющий доступ к дополнительным дням, которые были проанализированы. |
static final TemporalQuery |
parsedLeapSecond() |
Запрос, предоставляющий доступ к тому, был ли проанализирован високосный секунда. |
TemporalAccessor |
parseUnresolved |
Анализирует текст, используя этот форматтер, без разрешения результата, предназначен для расширенных случаев использования. |
Format |
toFormat() |
Возвращает этот форматтер как экземпляр java.text.Format. |
Format |
toFormat |
Возвращает этот форматтер как экземпляр java.text.Format экземпляр, который будет анализировать с использованием указанного запроса. |
String |
toString() |
Возвращает описание базовых форматтеров. |
DateTimeFormatter |
withChronology |
Возвращает копию этого форматтера с новой переопределенной хронологией. |
DateTimeFormatter |
withDecimalStyle |
Возвращает копию этого форматтера с новым DecimalStyle. |
DateTimeFormatter |
withLocale |
Возвращает копию этого форматтера с новой локалью. |
DateTimeFormatter |
withResolverFields |
Возвращает копию этого форматтера с новым набором полей разрешения. |
DateTimeFormatter |
withResolverFields |
Возвращает копию этого форматтера с новым набором полей разрешения. |
DateTimeFormatter |
withResolverStyle |
Возвращает копию этого форматтера с новым стилем разрешения. |
DateTimeFormatter |
withZone |
Возвращает копию этого форматтера с новым переопределённым часовым поясом. |
Подробное описание полей
ISO_LOCAL_DATE
public static final DateTimeFormatter ISO_LOCAL_DATE
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный локальный формат даты ISO-8601. Формат состоит из:
- Четыре цифры или больше для
year. Годы в диапазоне от 0000 до 9999 будут дополнены нулями слева, чтобы обеспечить четыре цифры. Годы вне этого диапазона будут иметь префиксный положительный или отрицательный знак. - Дефис ('HYPHEN-MINUS', U+002D)
- Две цифры для
month-of-year. Они дополняются нулями слева, чтобы обеспечить две цифры. - Дефис ('HYPHEN-MINUS', U+002D)
- Две цифры для
day-of-month. Они дополняются нулями слева, чтобы обеспечить две цифры.
Возвращаемый форматтер имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. Он не имеет наложенной зоны и использует стиль анализатора STRICT.
ISO_OFFSET_DATE
public static final DateTimeFormatter ISO_OFFSET_DATE
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты со смещением ISO-8601. Формат состоит из:
ISO_LOCAL_DATEoffset ID. Если смещение содержит секунды, они будут обработаны, даже если это не часть стандарта ISO-8601. Анализ нечувствителен к регистру.
Возвращаемый форматтер имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. Он не имеет наложенной зоны и использует стиль анализатора STRICT.
ISO_DATE
public static final DateTimeFormatter ISO_DATE
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты ISO-8601. Формат состоит из:
ISO_LOCAL_DATE- Если смещение недоступно, то формат завершен.
offset ID. Если смещение содержит секунды, они будут обработаны, даже если это не часть стандарта ISO-8601. Анализ нечувствителен к регистру.
Поскольку этот форматтер имеет необязательный элемент, может потребоваться анализ с помощью parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...).
Возвращаемый форматтер имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. Он не имеет наложенной зоны и использует стиль анализатора STRICT.
ISO_LOCAL_TIME
public static final DateTimeFormatter ISO_LOCAL_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный локальный формат времени ISO-8601. Формат состоит из:
- Две цифры для
hour-of-day. Они дополняются нулями слева, чтобы обеспечить две цифры. - Двоеточие
- Две цифры для
minute-of-hour. Они дополняются нулями слева, чтобы обеспечить две цифры. - Если секунды не доступны, то формат завершен.
- Двоеточие
- Две цифры для
second-of-minute. Они дополняются нулями слева, чтобы обеспечить две цифры. - Если наносекунды равны нулю или недоступны, то формат завершен.
- Десятичная точка
- От одной до девяти цифр для
nano-of-second. Выводится необходимое количество цифр.
Возвращаемый форматтер не имеет наложенной хронологии или зоны. Он использует стиль анализатора STRICT.
ISO_OFFSET_TIME
public static final DateTimeFormatter ISO_OFFSET_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат времени со смещением ISO-8601. Формат состоит из:
ISO_LOCAL_TIMEoffset ID. Если смещение содержит секунды, они будут обработаны, даже если это не часть стандарта ISO-8601. Анализ нечувствителен к регистру.
Возвращаемый форматтер не имеет наложенной хронологии или зоны. Он использует стиль анализатора STRICT.
ISO_TIME
public static final DateTimeFormatter ISO_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат локального или смещенного времени ISO-8601, а также расширенный не-ISO формат, указывающий часовой пояс. Формат состоит из:
ISO_LOCAL_TIME- Если смещение недоступно, то формат завершен.
offset ID. Если смещение содержит секунды, они будут обработаны, даже если это не часть стандарта ISO-8601.
Поскольку этот форматтер имеет необязательный элемент, может потребоваться анализ с помощью parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...).
Возвращаемый форматтер не имеет наложенной хронологии или зоны. Он использует стиль анализатора STRICT.
ISO_LOCAL_DATE_TIME
public static final DateTimeFormatter ISO_LOCAL_DATE_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный смещенный формат даты-времени ISO-8601. Формат состоит из:
ISO_LOCAL_DATE- Буква 'T'. Анализ нечувствителен к регистру.
ISO_LOCAL_TIME
Возвращаемый форматтер имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. Он не имеет наложенной зоны и использует стиль анализатора STRICT.
ISO_OFFSET_DATE_TIME
public static final DateTimeFormatter ISO_OFFSET_DATE_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты-времени со смещением ISO-8601. Формат состоит из:
ISO_LOCAL_DATE_TIMEoffset ID. Если смещение содержит секунды, они будут обработаны, даже если это не часть стандарта ISO-8601. Анализ смещения свободный, что позволяет сделать минуты и секунды необязательными. Анализ нечувствителен к регистру.
Возвращаемый форматтер имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. Он не имеет наложенной зоны и использует стиль анализатора STRICT.
ISO_ZONED_DATE_TIME
public static final DateTimeFormatter ISO_ZONED_DATE_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать формат, расширяющий формат даты-времени со смещением ISO-8601 для добавления часового пояса. Часть в квадратных скобках не является частью стандарта ISO-8601. Формат состоит из:
ISO_OFFSET_DATE_TIME- Если идентификатор часового пояса недоступен или является
ZoneOffset, то формат завершен. - Открывающая квадратная скобка '['.
zone ID. Это не часть стандарта ISO-8601. Анализ чувствителен к регистру.- Закрывающая квадратная скобка ']'.
Возвращаемый форматтер имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. Он не имеет наложенной зоны и использует стиль анализатора STRICT.
ISO_DATE_TIME
public static final DateTimeFormatter ISO_DATE_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный локальный или смещенный формат даты-времени ISO-8601, а также расширенный не-ISO формат, указывающий часовой пояс. Формат состоит из:
ISO_LOCAL_DATE_TIME- Если смещение недоступно для форматирования или анализа, то формат завершен.
offset ID. Если смещение содержит секунды, они будут обработаны, даже если это не часть стандарта ISO-8601.- Если идентификатор часового пояса недоступен или является
ZoneOffset, то формат завершен. - Открывающая квадратная скобка '['.
zone ID. Это не часть стандарта ISO-8601. Анализ чувствителен к регистру.- Закрывающая квадратная скобка ']'.
Поскольку этот форматтер имеет необязательный элемент, может потребоваться анализ с помощью parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...).
Возвращаемый форматтер имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. Он не имеет наложенной зоны и использует стиль анализатора STRICT.
ISO_ORDINAL_DATE
public static final DateTimeFormatter ISO_ORDINAL_DATE
Возвращает неизменяемый форматировщик, способный форматировать и анализировать расширенный формат порядковой даты ISO-8601. Формат состоит из:
- Четыре или более цифр для
year. Годы в диапазоне от 0000 до 9999 будут дополнены нулями до четырёх цифр. Годы вне этого диапазона будут иметь префиксный знак плюс или минус. - Дефис ('HYPHEN-MINUS', U+002D)
- Три цифры для
day-of-year. Дополняется нулями до трёх цифр. - Если смещение недоступно для форматирования или анализа, то формат завершается.
offset ID. Если смещение содержит секунды, то они будут обработаны, даже если это не часть стандарта ISO-8601. Анализ регистронезависимый.
Поскольку у этого форматировщика есть необязательный элемент, может потребоваться анализ с помощью parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...).
Возвращаемый форматировщик имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. У него нет переопределённой зоны и используется стиль разрешения STRICT.
ISO_WEEK_DATE
public static final DateTimeFormatter ISO_WEEK_DATE
Возвращает неизменяемый форматировщик, способный форматировать и анализировать расширенный формат даты на основе недели ISO-8601. Формат состоит из:
- Четыре или более цифр для
week-based-year. Годы в диапазоне от 0000 до 9999 будут дополнены нулями до четырёх цифр. Годы вне этого диапазона будут иметь префиксный знак плюс или минус. - Дефис ('HYPHEN-MINUS', U+002D)
- Буква 'W'. Анализ регистронезависимый.
- Две цифры для
week-of-week-based-year. Дополняется нулями до трёх цифр. - Дефис ('HYPHEN-MINUS', U+002D)
- Одна цифра для
day-of-week. Значения от понедельника (1) до воскресенья (7). - Если смещение недоступно для форматирования или анализа, то формат завершается.
offset ID. Если смещение содержит секунды, то они будут обработаны, даже если это не часть стандарта ISO-8601. Анализ регистронезависимый.
Поскольку у этого форматировщика есть необязательный элемент, может потребоваться анализ с помощью parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...).
Возвращаемый форматировщик имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. У него нет переопределённой зоны и используется стиль разрешения STRICT.
ISO_INSTANT
public static final DateTimeFormatter ISO_INSTANT
Возвращает неизменяемый форматировщик, способный форматировать и анализировать формат мгновенного момента времени ISO-8601. При форматировании мгновение времени всегда будет суффикс 'Z', указывающий UTC. Секунды всегда выводятся. Миллисекунды выводятся нулём, тремя, шестью или девятью знаками по мере необходимости. При анализе используется поведение DateTimeFormatterBuilder.appendOffsetId() для анализа смещения, преобразуя мгновение времени в UTC при необходимости. Требуется время до по крайней мере секунд. Дробные секунды от нуля до девяти анализируются. Локализованный десятичный стиль не используется.
Это форматировщик специального случая, предназначенный для предоставления удобочитаемой формы Instant. Класс Instant предназначен только для представления момента во времени и внутренне хранит значение в наносекундах с фиксированной эпохой 1970-01-01Z. Таким образом, Instant не может быть отформатирован как дата или время без предоставления какой-либо временной зоны. Этот форматировщик позволяет отформатировать Instant путём предоставления соответствующего преобразования, используя ZoneOffset.UTC.
Формат состоит из:
- Формат
ISO_OFFSET_DATE_TIME, где мгновение времени преобразуется изChronoField.INSTANT_SECONDSиChronoField.NANO_OF_SECONDс использованием смещенияUTC. Анализ регистронезависимый.
Возвращаемый форматировщик не имеет переопределённой хронологии или зоны. Используется стиль разрешения STRICT.
BASIC_ISO_DATE
public static final DateTimeFormatter BASIC_ISO_DATE
Возвращает неизменяемый форматировщик, способный форматировать и анализировать базовый локальный формат даты ISO-8601. Формат состоит из:
- Четыре цифры для
year. Поддерживаются только годы в диапазоне от 0000 до 9999. - Две цифры для
month-of-year. Дополняется нулями до двух цифр. - Две цифры для
day-of-month. Дополняется нулями до двух цифр. - Если смещение недоступно для форматирования или анализа, то формат завершается.
offset IDбез двоеточий. Если смещение содержит секунды, то они будут обработаны, даже если это не часть стандарта ISO-8601. Анализ смещения допускает необязательные минуты и секунды. Анализ регистронезависимый.
Поскольку у этого форматировщика есть необязательный элемент, может потребоваться анализ с помощью parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...).
Возвращаемый форматировщик имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. У него нет переопределённой зоны и используется стиль разрешения STRICT.
RFC_1123_DATE_TIME
public static final DateTimeFormatter RFC_1123_DATE_TIME
Возвращает неизменяемый форматировщик, способный форматировать и анализировать большую часть формата RFC-1123. RFC-1123 обновляет RFC-822, изменяя год с двух цифр на четыре. Эта реализация требует четырёхзначного года. Эта реализация также не обрабатывает североамериканские или военные названия зон, только 'GMT' и значения смещения.
Формат состоит из:
- Если день недели недоступен для форматирования или анализа, переходим к дню месяца.
- Аббревиатура
day-of-weekв английском языке. - Запятая
- Пробел
- Одна или две цифры для
day-of-month. - Пробел
- Аббревиатура
month-of-yearв английском языке. - Пробел
- Четыре цифры для
year. Поддерживаются только годы в диапазоне от 0000 до 9999. - Пробел
- Две цифры для
hour-of-day. Дополняется нулями до двух цифр. - Двоеточие
- Две цифры для
minute-of-hour. Дополняется нулями до двух цифр. - Если секунды недоступны, переходим к следующему пробелу.
- Двоеточие
- Две цифры для
second-of-minute. Дополняется нулями до двух цифр. - Пробел
offset IDбез двоеточий или секунд. Смещение нуля используется "GMT". Североамериканские и военные названия зон не обрабатываются.
Анализ регистронезависимый.
Возвращаемый форматировщик имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. У него нет переопределённой зоны и используется стиль разрешения SMART.
Методы
ofPattern
public static DateTimeFormatter ofPattern(String pattern)
Этот метод создаст форматировщик на основе простого шаблона букв и символов, как описано в документации класса. Например, d MMM uuuu отформатирует 2011-12-03 как '3 Dec 2011'.
Форматировщик будет использовать default FORMAT locale. Это можно изменить, используя withLocale(Locale) на возвращаемом форматировщике. Или используйте вариант метода ofPattern(String, Locale).
Возвращаемый форматировщик не имеет переопределённой хронологии или зоны. Используется стиль разрешения SMART.
- Параметры:
-
pattern- используемый шаблон, не null - Возвращает:
- форматировщик на основе шаблона, не null
- Выбрасывает:
-
IllegalArgumentException- если шаблон недействителен - См. также:
ofPattern
public static DateTimeFormatter ofPattern(String pattern, Locale locale)
Этот метод создаст форматер на основе простого шаблона букв и символов, как описано в документации класса. Например, d MMM uuuu преобразует 2011-12-03 в '3 Dec 2011'.
Форматер будет использовать указанную локаль. Это можно изменить, используя withLocale(Locale) для возвращаемого форматера.
Возвращаемый форматер не имеет переопределённой хронологии или зоны. Он использует SMART стиль разрешения.
- Parameters:
-
pattern- шаблон для использования, не null -
locale- локаль для использования, не null - Returns:
- форматер, основанный на шаблоне, не null
- Throws:
-
IllegalArgumentException- если шаблон некорректен - See Also:
ofLocalizedDate
public static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle)
Возвращает форматер, который будет форматировать или анализировать дату. Точный шаблон формата зависит от локали.
Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, будет использовать default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) для результата этого метода.
Обратите внимание, что локальный шаблон ищется лениво. Этот метод DateTimeFormatter сохраняет необходимый стиль и локаль, ищущий шаблон по требованию.
Возвращаемый форматер имеет хронологию ISO, чтобы гарантировать правильное преобразование дат других календарных систем. У него нет переопределённой зоны и используется SMART стиль разрешения.
- Parameters:
-
dateStyle- стиль форматера для получения, не null - Returns:
- форматер даты, не null
ofLocalizedTime
public static DateTimeFormatter ofLocalizedTime(FormatStyle timeStyle)
Возвращает форматер, который будет форматировать или анализировать время. Точный шаблон формата зависит от локали.
Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, будет использовать default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) для результата этого метода.
Обратите внимание, что локальный шаблон ищется лениво. Этот метод DateTimeFormatter сохраняет необходимый стиль и локаль, ищущий шаблон по требованию.
Возвращаемый форматер имеет хронологию ISO, чтобы гарантировать правильное преобразование дат других календарных систем. У него нет переопределённой зоны и используется SMART стиль разрешения. Стиль FULL и LONG обычно требуют временной зоны. При форматировании с использованием этих стилей должна быть доступна ZoneId зона, либо с помощью ZonedDateTime или withZone(java.time.ZoneId).
- Parameters:
-
timeStyle- стиль форматера для получения, не null - Returns:
- форматер времени, не null
ofLocalizedDateTime
public static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateTimeStyle)
Возвращает форматер, который будет форматировать или анализировать дату и время. Точный шаблон формата зависит от локали.
Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, будет использовать default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) для результата этого метода.
Обратите внимание, что локальный шаблон ищется лениво. Этот метод DateTimeFormatter сохраняет необходимый стиль и локаль, ищущий шаблон по требованию.
Возвращаемый форматер имеет хронологию ISO, чтобы гарантировать правильное преобразование дат других календарных систем. У него нет переопределённой зоны и используется SMART стиль разрешения. Стиль FULL и LONG обычно требуют временной зоны. При форматировании с использованием этих стилей должна быть доступна ZoneId зона, либо с помощью ZonedDateTime или withZone(java.time.ZoneId).
- Parameters:
-
dateTimeStyle- стиль форматера для получения, не null - Returns:
- форматер даты и времени, не null
ofLocalizedDateTime
public static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateStyle, FormatStyle timeStyle)
Возвращает форматер, который будет форматировать или анализировать дату и время. Точный шаблон формата зависит от локали.
Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, будет использовать default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) для результата этого метода.
Обратите внимание, что локальный шаблон ищется лениво. Этот метод DateTimeFormatter сохраняет необходимый стиль и локаль, ищущий шаблон по требованию.
Возвращаемый форматер имеет хронологию ISO, чтобы гарантировать правильное преобразование дат других календарных систем. У него нет переопределённой зоны и используется SMART стиль разрешения. Стиль FULL и LONG обычно требуют временной зоны. При форматировании с использованием этих стилей должна быть доступна ZoneId зона, либо с помощью ZonedDateTime или withZone(java.time.ZoneId).
- Parameters:
-
dateStyle- стиль форматера даты для получения, не null -
timeStyle- стиль форматера времени для получения, не null - Returns:
- форматер даты, времени или даты и времени, не null
ofLocalizedPattern
public static DateTimeFormatter ofLocalizedPattern(String requestedTemplate)
"G{0,5}" + // Era
"y*" + // Year
"Q{0,5}" + // Quarter
"M{0,5}" + // Month
"w*" + // Week of Week Based Year
"E{0,5}" + // Day of Week
"d{0,2}" + // Day of Month
"B{0,5}" + // Period/AmPm of Day
"[hHjC]{0,2}" + // Hour of Day/AmPm (refer to LDML for 'j' and 'C')
"m{0,2}" + // Minute of Hour
"s{0,2}" + // Second of Minute
"[vz]{0,4}" // Zone
Сопоставление запрошенного шаблона с ближайшими из доступных локальных форматов определяется спецификацией Unicode LDML. Например, форматер, созданный из шаблона yMMM , отформатирует дату '2020-06-16' в 'Jun 2020' в US locale.
Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, использует default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) для результата этого метода.
Возвращаемый форматер не имеет переопределённой зоны. Он использует SMART стиль разрешения.
- Parameters:
-
requestedTemplate- запрошенный шаблон, не null - Returns:
- форматер, основанный на
requestedTemplateшаблоне, не null - Throws:
-
IllegalArgumentException- еслиrequestedTemplateшаблон некорректен - Since:
- 19
- External Specifications
- See Also:
parsedExcessDays
public static final TemporalQuery<Period> parsedExcessDays()
Возвращает одиночный запрос, обеспечивающий доступ к дополнительной информации из разбора. Запрос всегда возвращает не-null период, вместо null возвращает нулевой период.
Существуют две ситуации, в которых этот запрос может вернуть ненулевой период.
- Если
ResolverStyleрежимLENIENT, и время анализируется без даты, то весь результат разбора состоит изLocalTimeи избыточногоPeriodв днях. - Если
ResolverStyleрежимSMART, и время анализируется без даты, где время равно 24:00:00, то весь результат разбора состоит изLocalTime00:00:00 и избыточногоPeriodв один день.
В обоих случаях, если весь ChronoLocalDateTime или Instant анализируется, то избыточные дни добавляются к части даты. В результате этот запрос вернёт нулевой период.
Поведение SMART обрабатывает распространённое значение «конец дня» 24:00. Обработка в режиме LENIENT также даёт такой же результат:
Text to parse Parsed object Excess days "2012-12-03T00:00" LocalDateTime.of(2012, 12, 3, 0, 0) ZERO "2012-12-03T24:00" LocalDateTime.of(2012, 12, 4, 0, 0) ZERO "00:00" LocalTime.of(0, 0) ZERO "24:00" LocalTime.of(0, 0) Period.ofDays(1)Запрос может быть использован следующим образом:
TemporalAccessor parsed = formatter.parse(str); LocalTime time = parsed.query(LocalTime::from); Period extraDays = parsed.query(DateTimeFormatter.parsedExcessDays());
- Returns:
- запрос, предоставляющий доступ к избыточным дням, которые были проанализированы
parsedLeapSecond
public static final TemporalQuery<Boolean> parsedLeapSecond()
Возвращает единственный экземпляр запроса, предоставляющего доступ к дополнительной информации из результата анализа. Запрос всегда возвращает непустое значение boolean, true, если при анализе была найдена високосная секунда, и false — если нет.
Анализ момента времени обрабатывает специальное время «високосной секунды» '23:59:60'. Високосные секунды происходят в '23:59:60' в часовом поясе UTC, но в другое местное время в других часовых поясах. Чтобы избежать этой потенциальной неоднозначности, обработка високосных секунд ограничена методом DateTimeFormatterBuilder.appendInstant(), так как этот метод всегда анализирует момент времени с часовым смещением UTC.
Если получено время '23:59:60', применяется простое преобразование, заменяющее секунду минуты 60 на 59. Этот запрос можно использовать с результатом анализа для определения, была ли выполнена корректировка на високосную секунду. Запрос вернёт true если была произведена корректировка для удаления високосной секунды и false — если нет. Обратите внимание, что применение механизма сглаживания високосных секунд, такого как UTC-SLS, является обязанностью приложения, как показано ниже:
TemporalAccessor parsed = formatter.parse(str);
Instant instant = parsed.query(Instant::from);
if (parsed.query(DateTimeFormatter.parsedLeapSecond())) {
// validate leap-second is correct and apply correct smoothing
}
- Returns:
- запрос, предоставляющий доступ к информации о том, была ли проанализирована високосная секунда
getLocale
public Locale getLocale()
Используется для поиска любой части форматировщика, требующей специфической локализации, такой как текст или локализованный шаблон.
- Returns:
- локаль этого форматировщика, не null
withLocale
public DateTimeFormatter withLocale(Locale locale)
Используется для поиска любой части форматировщика, требующей специфической локализации, такой как текст или локализованный шаблон.
Локаль хранится в переданном виде, без дальнейшей обработки. Если локаль содержит расширения Unicode, они могут быть использованы позже в обработке текста. Чтобы установить хронологию, часовой пояс и десятичный стиль из расширений Unicode, см. localizedBy().
Этот экземпляр неизменяем и не затрагивается этим вызовом метода.
- Parameters:
-
locale- новая локаль, не null - Returns:
- форматировщик, основанный на этом форматировщике с запрошенной локалью, не null
- See Also:
localizedBy
public DateTimeFormatter localizedBy(Locale locale)
Используется для поиска любой части форматировщика, требующей специфической локализации, такой как текст или локализованный шаблон. Если локаль содержит расширения Unicode «ca» (календарь), «nu» (система нумерации), «rg» (переопределение региона) и/или «tz» (часовой пояс), хронология, система нумерации и/или зона переопределяются. Если указаны «ca» и «rg», хронология из расширения «ca» переопределяет неявную из расширения «rg». То же самое относится к расширению «nu».
В отличие от метода withLocale, вызов этого метода может привести к созданию другого форматировщика в зависимости от порядка цепочки вызовов с другими методами сXXXX().
Этот экземпляр неизменяем и не затрагивается этим вызовом метода.
- Parameters:
-
locale- локаль, не null - Returns:
- форматировщик, основанный на этом форматировщике с локализованными значениями календаря, десятичного стиля и/или часового пояса, которые переопределяют значения в этом форматировщике.
- Since:
- 10
- See Also:
getDecimalStyle
public DecimalStyle getDecimalStyle()
- Returns:
- DecimalStyle этого форматировщика, не null
withDecimalStyle
public DateTimeFormatter withDecimalStyle(DecimalStyle decimalStyle)
Этот экземпляр неизменяем и не затрагивается этим вызовом метода.
- Parameters:
-
decimalStyle- новый DecimalStyle, не null - Returns:
- форматировщик, основанный на этом форматировщике с запрошенным DecimalStyle, не null
getChronology
public Chronology getChronology()
Возвращает переопределённую хронологию, используемую для преобразования дат. По умолчанию форматировщик не имеет переопределяющей хронологии, возвращая null. См. withChronology(Chronology) для получения более подробной информации о переопределении.
- Returns:
- переопределяющую хронологию этого форматировщика, null если нет переопределения
withChronology
public DateTimeFormatter withChronology(Chronology chrono)
Возвращает форматировщик с аналогичным состоянием, что и этот форматировщик, но с установленной переопределяющей хронологией. По умолчанию форматировщик не имеет переопределяющей хронологии, возвращая null.
Если переопределение добавлено, то любая дата, которая форматируется или анализируется, будет затронута.
При форматировании, если временной объект содержит дату, она будет преобразована в дату в переопределённой хронологии. Определяется ли временной объект как дата, запрашивая поле EPOCH_DAY. Любое время или зона будут сохранены неизменными, если не переопределены.
Если временной объект не содержит дату, но содержит одно или несколько ChronoField полей даты, то выбрасывается DateTimeException. Во всех остальных случаях переопределяющая хронология добавляется к временному объекту, заменяя предыдущую хронологию, но не изменяя дату/время.
При анализе необходимо рассмотреть два разных случая. Если хронология была проанализирована непосредственно из текста, возможно, потому что был использован DateTimeFormatterBuilder.appendChronologyId(), то это переопределяющая хронология не оказывает никакого влияния. Если зона не была проанализирована, то эта переопределяющая хронология будет использоваться для интерпретации значений ChronoField в дату в соответствии с правилами разрешения даты хронологии.
Этот экземпляр неизменяем и не затрагивается этим вызовом метода.
- Parameters:
-
chrono- новая хронология, null если нет переопределения - Returns:
- форматировщик, основанный на этом форматировщике с запрошенной переопределяющей хронологией, не null
getZone
public ZoneId getZone()
Возвращает переопределённую зону, используемую для преобразования моментов времени. По умолчанию форматировщик не имеет переопределённой зоны, возвращая null. См. withZone(ZoneId) для получения более подробной информации о переопределении.
- Returns:
- переопределяющую зону этого форматировщика, null если нет переопределения
withZone
public DateTimeFormatter withZone(ZoneId zone)
Возвращает форматировщик с аналогичным состоянием, что и этот форматировщик, но с установленной переопределяющей зоной. По умолчанию форматировщик не имеет переопределённой зоны, возвращая null.
Если переопределение добавлено, то любой момент времени, который форматируется или анализируется, будет затронут.
При форматировании, если временной объект содержит момент времени, он преобразуется в дату-время с часовым поясом, используя переопределённую зону. Определяется ли временной объект как момент времени, запрашивая поле INSTANT_SECONDS. Если входной объект имеет хронологию, она сохраняется, если не переопределена. Если входной объект не имеет хронологии, такой как Instant, используется хронология ISO.
Если временной объект не содержит момент времени, но содержит смещение, выполняется дополнительная проверка. Если нормализованная переопределённая зона — это смещение, отличное от смещения временного объекта, то выбрасывается DateTimeException . Во всех остальных случаях переопределённая зона добавляется к временному объекту, заменяя предыдущую зону, но не изменяя дату/время.
При анализе необходимо рассмотреть два разных случая. Если зона была проанализирована непосредственно из текста, возможно, потому что был использован DateTimeFormatterBuilder.appendZoneId(), то это переопределяющая зона не оказывает никакого влияния. Если зона не была проанализирована, то эта переопределяющая зона будет включена в результат анализа, где она может использоваться для построения моментов времени и дат-времени.
Этот экземпляр неизменяем и не затрагивается этим вызовом метода.
- Parameters:
-
zone- новая переопределяющая зона, null если нет переопределения - Returns:
- форматировщик, основанный на этом форматировщике с запрошенной переопределяющей зоной, не null
getResolverStyle
public ResolverStyle getResolverStyle()
Возвращает стиль разрешения, используемый на втором этапе анализа, когда поля разрешаются в даты и времена. По умолчанию форматировщик имеет стиль разрешения SMART. См. withResolverStyle(ResolverStyle) для получения более подробной информации.
- Returns:
- стиль разрешения этого форматировщика, не null
стилизованныйРазрешитель
public DateTimeFormatter withResolverStyle(ResolverStyle resolverStyle)
Это возвращает форматер с похожим состоянием, как у этого форматера, но со стилем разрешителя, установленным. По умолчанию форматер имеет стиль разрешителя SMART.
Изменение стиля разрешителя влияет только во время разбора. Разбор текстовой строки происходит в две фазы. Фаза 1 — это базовый разбор текста в соответствии с полями, добавленными в билдер. Фаза 2 разрешает пары поле-значение, полученные в результате разбора, в объекты даты и/или времени. Стиль разрешителя используется для управления тем, как происходит фаза 2, разрешение. Подробнее об доступных вариантах см. ResolverStyle
Этот экземпляр неизменяем и не затрагивается этим вызовом метода.
- Параметры:
-
resolverStyle- новый стиль разрешителя, не null - Возвращает:
- форматер, основанный на этом форматере, с запрошенным стилем разрешителя, не null
getResolverFields
public Set<TemporalField> getResolverFields()
Это возвращает поля разрешителя, используемые во второй фазе разбора, когда поля разрешаются в даты и время. По умолчанию форматер не имеет полей разрешителя и, следовательно, возвращает null. Подробнее см. withResolverFields(Set).
- Возвращает:
- неизменяемый набор полей разрешителя этого форматера, null, если полей нет
withResolverFields
public DateTimeFormatter withResolverFields(TemporalField... resolverFields)
Это возвращает форматер с похожим состоянием, как у этого форматера, но с установленными полями разрешителя. По умолчанию у форматера нет полей разрешителя.
Изменение полей разрешителя влияет только во время разбора. Разбор текстовой строки происходит в две фазы. Фаза 1 — это базовый разбор текста в соответствии с полями, добавленными в билдер. Фаза 2 разрешает пары поле-значение, полученные в результате разбора, в объекты даты и/или времени. Поля разрешителя используются для фильтрации пар поле-значение между фазой 1 и 2.
Это можно использовать для выбора между двумя или более способами разрешения даты или времени. Например, если форматер состоит из года, месяца, дня месяца и дня года, то есть два способа разрешения даты. Вызов этого метода с аргументами YEAR и DAY_OF_YEAR гарантирует, что дата будет разрешаться с помощью года и дня года, фактически означая, что месяц и день месяца игнорируются во время фазы разрешения.
Аналогичным образом, этот метод можно использовать для игнорирования вторичных полей, которые в противном случае проверялись бы на соответствие. Например, если форматер состоит из года, месяца, дня месяца и дня недели, то есть только один способ разрешения даты, но значение, полученное в результате разбора для дня недели, будет проверяться на соответствие с разрешенной датой. Вызов этого метода с аргументами YEAR, MONTH_OF_YEAR и DAY_OF_MONTH гарантирует, что дата будет разрешена правильно, но без проверки на соответствие дня недели.
С точки зрения реализации, этот метод работает следующим образом. Результат фазы разбора можно рассматривать как карту поле-значение. Действие этого метода заключается в том, чтобы вызвать фильтрацию этой карты между фазами 1 и 2, удаляя все поля, кроме тех, которые указаны в качестве аргументов этого метода.
Этот экземпляр неизменяем и не затрагивается этим вызовом метода.
- Параметры:
-
resolverFields- новый набор полей разрешителя, null, если полей нет - Возвращает:
- форматер, основанный на этом форматере, с запрошенным стилем разрешителя, не null
withResolverFields
public DateTimeFormatter withResolverFields(Set<TemporalField> resolverFields)
Это возвращает форматер с похожим состоянием, как у этого форматера, но с установленными полями разрешителя. По умолчанию у форматера нет полей разрешителя.
Изменение полей разрешителя влияет только во время разбора. Разбор текстовой строки происходит в две фазы. Фаза 1 — это базовый разбор текста в соответствии с полями, добавленными в билдер. Фаза 2 разрешает пары поле-значение, полученные в результате разбора, в объекты даты и/или времени. Поля разрешителя используются для фильтрации пар поле-значение между фазой 1 и 2.
Это можно использовать для выбора между двумя или более способами разрешения даты или времени. Например, если форматер состоит из года, месяца, дня месяца и дня года, то есть два способа разрешения даты. Вызов этого метода с аргументами YEAR и DAY_OF_YEAR гарантирует, что дата будет разрешаться с помощью года и дня года, фактически означая, что месяц и день месяца игнорируются во время фазы разрешения.
Аналогичным образом, этот метод можно использовать для игнорирования вторичных полей, которые в противном случае проверялись бы на соответствие. Например, если форматер состоит из года, месяца, дня месяца и дня недели, то есть только один способ разрешения даты, но значение, полученное в результате разбора для дня недели, будет проверяться на соответствие с разрешенной датой. Вызов этого метода с аргументами YEAR, MONTH_OF_YEAR и DAY_OF_MONTH гарантирует, что дата будет разрешена правильно, но без проверки на соответствие дня недели.
С точки зрения реализации, этот метод работает следующим образом. Результат фазы разбора можно рассматривать как карту поле-значение. Действие этого метода заключается в том, чтобы вызвать фильтрацию этой карты между фазами 1 и 2, удаляя все поля, кроме тех, которые указаны в качестве аргументов этого метода.
Этот экземпляр неизменяем и не затрагивается этим вызовом метода.
- Параметры:
-
resolverFields- новый набор полей разрешителя, null, если полей нет - Возвращает:
- форматер, основанный на этом форматере, с запрошенным стилем разрешителя, не null
форматировать
public String format(TemporalAccessor temporal)
Это форматирует дату-время в строку по правилам форматера.
- Параметры:
-
temporal- объект временной шкалы для форматирования, не null - Возвращает:
- отформатированная строка, не null
- Исключение:
-
DateTimeException- если при форматировании произошла ошибка
formatTo
public void formatTo(TemporalAccessor temporal, Appendable appendable)
Appendable с помощью этого форматера. Это выводит отформатированную дату-время в указанное место назначения. Appendable — это интерфейс общего назначения, реализованный всеми ключевыми классами вывода символов, включая StringBuffer, StringBuilder, PrintStream и Writer.
Хотя методы Appendable выбрасывают IOException, этот метод этого не делает. Вместо этого любое IOException оборачивается в исключение времени выполнения.
- Параметры:
-
temporal- объект временной шкалы для форматирования, не null -
appendable- объект для добавления, не null - Исключение:
-
DateTimeException- если при форматировании произошла ошибка
разбор
public TemporalAccessor parse(CharSequence text)
Этот метод анализирует весь текст, создавая объект временной шкалы. Обычно более полезно использовать parse(CharSequence, TemporalQuery). Результат этого метода — TemporalAccessor, который был разрешен, применяя базовые проверки для обеспечения корректности даты и времени.
Если разбор завершается без чтения всего текста, или при разборе или объединении возникла проблема, то генерируется исключение.
- Параметры:
-
text- текст для анализа, не null - Возвращает:
- объект временной шкалы, полученный в результате анализа, не null
- Исключение:
-
DateTimeParseException- если не удалось выполнить анализ запрошенного результата
разбор
public TemporalAccessor parse(CharSequence text, ParsePosition position)
Этот метод анализирует текст, не требуя начала анализа с начала строки или завершения в конце. Результат этого метода — TemporalAccessor, который был разрешен, применяя базовые проверки для обеспечения корректности даты и времени.
Текст будет анализироваться с указанной начальной ParsePosition. Не обязательно анализировать всю длину текста, ParsePosition будет обновлено с индексом в конце анализа.
Работа этого метода немного отличается от аналогичных методов, использующих ParsePosition в java.text.Format. Этот класс возвращает ошибки, используя индекс ошибки в ParsePosition. В отличие от этого, этот метод сгенерирует исключение DateTimeParseException, если произойдет ошибка, и исключение будет содержать индекс ошибки. Это изменение поведения необходимо из-за повышенной сложности анализа и разрешения дат/времени в этом API.
Если форматер анализирует одно и то же поле более одного раза с разными значениями, результатом будет ошибка.
- Параметры:
-
text- текст для анализа, не null -
position- позиция для анализа, обновляется с длиной проанализированного текста и индексом любой ошибки, не null - Возвращает:
- объект временной шкалы, полученный в результате анализа, не null
- Исключение:
-
DateTimeParseException- если не удалось выполнить анализ запрошенного результата -
IndexOutOfBoundsException- если позиция недопустима
parse
public <T> T parse(CharSequence text, TemporalQuery<T> query)
Большинство приложений должны использовать этот метод для анализа. Он анализирует весь текст, чтобы создать требуемую дату и время. Запрос обычно является ссылкой на метод from(TemporalAccessor) метода. Например:
LocalDateTime dt = parser.parse(str, LocalDateTime::from);Если анализ завершается без чтения всего текста или возникает проблема во время анализа или слияния, выбрасывается исключение.
- Параметры типа:
-
T- тип анализируемой даты и времени - Параметры:
-
text- текст для анализа, не null -
query- запрос, определяющий тип для анализа, не null - Возвращает:
- анализируемая дата и время, не null
- Исключения:
-
DateTimeParseException- если невозможно проанализировать требуемый результат
parseBest
public TemporalAccessor parseBest(CharSequence text, TemporalQuery<?>... queries)
Этот метод анализа удобен для использования, когда анализатор может обрабатывать необязательные элементы. Например, шаблон 'uuuu-MM-dd HH.mm[ VV]' может быть полностью проанализирован до ZonedDateTime, или частично проанализирован до LocalDateTime. Запросы должны быть указаны в порядке, начиная с лучшего варианта полного анализа и заканчивая худшим вариантом минимального анализа. Запрос обычно является ссылкой на метод from(TemporalAccessor) метода.
Результат ассоциируется с первым типом, который успешно анализируется. Обычно приложения будут использовать instanceof для проверки результата. Например:
TemporalAccessor dt = parser.parseBest(str, ZonedDateTime::from, LocalDateTime::from);
if (dt instanceof ZonedDateTime) {
...
} else {
...
}
Если анализ завершается без чтения всего текста или возникает проблема во время анализа или слияния, выбрасывается исключение.- Параметры:
-
text- текст для анализа, не null -
queries- запросы, определяющие типы для попытки анализа, должны реализовыватьTemporalAccessor, не null - Возвращает:
- анализируемая дата и время, не null
- Исключения:
-
IllegalArgumentException- если указано менее 2 типов -
DateTimeParseException- если невозможно проанализировать требуемый результат
parseUnresolved
public TemporalAccessor parseUnresolved(CharSequence text, ParsePosition position)
Анализ реализован как двухэтапная операция. Во-первых, текст анализируется с использованием макета, определенного форматировщиком, создавая Map поля к значению, ZoneId и Chronology. Во-вторых, проанализированные данные разрешаются, путем проверки, объединения и упрощения различных полей в более полезные. Этот метод выполняет этап анализа, но не этап разрешения.
Результат этого метода TemporalAccessor представляет данные так, как они видны на входе. Значения не проверяются, поэтому при анализе строковой даты '2012-00-65' будет получена временная метка с тремя полями: год '2012', месяц '0' и день '65'.
Текст будет анализироваться с указанного начального ParsePosition. Не нужно анализировать всю длину текста, ParsePosition будет обновлён с индексом в конце анализа.
Ошибки возвращаются с помощью поля индекса ошибки ParsePosition вместо parse(CharSequence, TemporalQuery). Возвращаемый индекс ошибки будет установлен на индекс, указывающий на ошибку. Вызывающие стороны должны проверять наличие ошибок перед использованием результата.
Если форматировщик анализирует одно и то же поле более одного раза с разными значениями, будет ошибка.
Этот метод предназначен для продвинутых случаев использования, требующих доступа к внутреннему состоянию во время анализа. Типичный код приложения должен использовать parse(CharSequence, TemporalQuery) или метод анализа целевого типа.
- Параметры:
-
text- текст для анализа, не null -
position- позиция для анализа, обновляется с длиной проанализированного и индексом любой ошибки, не null - Возвращает:
- проанализированный текст, null, если анализ приводит к ошибке
- Исключения:
-
DateTimeException- если возникает проблема во время анализа -
IndexOutOfBoundsException- если позиция недействительна
toFormat
public Format toFormat()
java.text.Format. Возвращаемый экземпляр Format будет форматировать любой TemporalAccessor и анализировать до разрешенного TemporalAccessor.
Исключения будут следовать определениям Format, см. эти методы для получения подробной информации о IllegalArgumentException во время форматирования и ParseException или null во время анализа. Формат не поддерживает присвоение возвращаемой строке форматирования.
- Возвращает:
- этот форматировщик как экземпляр классического форматирования, не null
toFormat
public Format toFormat(TemporalQuery<?> parseQuery)
java.text.Format , который будет анализировать с помощью указанного запроса. Возвращаемый экземпляр Format будет форматировать любой TemporalAccessor и анализировать до указанного типа. Тип должен быть одним из поддерживаемых parse(java.lang.CharSequence).
Исключения будут следовать определениям Format, см. эти методы для получения подробной информации о IllegalArgumentException во время форматирования и ParseException или null во время анализа. Формат не поддерживает присвоение возвращаемой строке форматирования.
- Параметры:
-
parseQuery- запрос, определяющий тип для анализа, не null - Возвращает:
- этот форматировщик как экземпляр классического форматирования, не null
toString
public String toString()
- Overrides:
-
toStringв классеObject - Возвращает:
- описание этого форматировщика, не null
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/time/format/DateTimeFormatter.html