Класс 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);
Помимо формата, форматтеры можно создавать с нужными Locale, Chronology, ZoneId и DecimalStyle.
Метод withLocale возвращает новый форматтер, переопределяющий локаль. Локаль влияет на некоторые аспекты форматирования и разбора. Например, ofLocalizedDate предоставляет форматтер, использующий формат даты, соответствующий локали.
Метод withChronology возвращает новый форматтер, переопределяющий хронологию. Если хронология переопределена, значение даты и времени перед форматированием преобразуется к этой хронологии. При разборе значение даты и времени преобразуется к хронологии перед возвратом.
Метод withZone возвращает новый форматтер, переопределяющий зону. Если зона переопределена, значение даты и времени перед форматированием преобразуется в ZonedDateTime с указанным ZoneId. При разборе ZoneId применяется перед возвратом значения.
Метод withDecimalStyle возвращает новый форматтер, переопределяющий DecimalStyle. Символы DecimalStyle используются для форматирования и разбора.
Некоторым приложениям может понадобиться старый класс java.text.Format для форматирования. Метод toFormat() возвращает реализацию java.text.Format.
Предопределённые форматтеры
| Форматтер | Описание | Пример |
|---|---|---|
ofLocalizedDate(dateStyle) | Форматтер со стилем даты, заданным локалью | '2011-12-03' |
ofLocalizedTime(timeStyle) | Форматтер со стилем времени, заданным локалью | '10:15:30' |
ofLocalizedDateTime(dateTimeStyle) | Форматтер со стилем даты и времени, заданным локалью | '3 Jun 2008 11:05:30' |
ofLocalizedDateTime(dateStyle,timeStyle) | Форматтер со стилями даты и времени, заданными локалью | '3 Jun 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
| Дата и время с ZoneId | '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 | 'Tue, 3 Jun 2008 11:05:30 GMT' |
Шаблоны форматирования и разбора
Шаблоны основаны на простой последовательности букв и символов. Шаблон используется для создания форматтера с помощью методовofPattern(String) и ofPattern(String, Locale). Например, "d MMM uuuu" отформатирует дату 2011-12-03 как '3 Dec 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 | эра | текст | AD; Anno Domini; A |
| u | год | год | 2004; 04 |
| y | год эры | год | 2004; 04 |
| D | день года | число | 189 |
| M/L | месяц года | число/текст | 7; 07; Jul; July; J |
| d | день месяца | число | 10 |
| g | модифицированный юлианский день | число | 2451334 |
| Q/q | квартал года | число/текст | 3; 03; Q3; 3rd quarter |
| Y | год по неделям | год | 1996; 96 |
| w | неделя года по неделям | число | 27 |
| W | неделя месяца | число | 4 |
| E | день недели | текст | Tue; Tuesday; T |
| e/c | локализованный день недели | число/текст | 2; 02; Tue; Tuesday; T |
| F | неделя месяца с выравниванием | число | 3 |
| a | часть суток до/после полудня | текст | PM |
| B | период суток | текст | утром |
| h | час по 12-часовым часам (1–12) | число | 12 |
| K | час до/после полудня (0–11) | число | 0 |
| k | час суток по 24-часовым часам (1–24) | число | 24 |
| H | час суток (0–23) | число | 0 |
| m | минута часа | число | 30 |
| s | секунда минуты | число | 55 |
| S | доля секунды | дробь | 978 |
| A | миллисекунда суток | число | 1234 |
| n | наносекунда секунды | число | 987654321 |
| N | наносекунда суток | число | 1234000000 |
| V | идентификатор часового пояса | идентификатор зоны | America/Los_Angeles; Z; -08:30 |
| v | общее название часового пояса | название зоны | Pacific Time; PT |
| z | название часового пояса | название зоны | Pacific Standard Time; 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 |
| ' | экранирование текста | разделитель | |
| '' | одинарная кавычка | литерал | ' |
| [ | начало необязательной секции | ||
| ] | конец необязательной секции | ||
| # | зарезервировано для будущего использования | ||
| { | зарезервировано для будущего использования | ||
| } | зарезервировано для будущего использования |
Количество букв шаблона определяет формат.
Текст: Стиль текста определяется количеством используемых букв шаблона. Если букв шаблона меньше четырёх, используется short form. Если букв шаблона ровно четыре, используется full form. Если букв шаблона ровно пять, используется narrow form. Буквы шаблона 'L', 'c' и 'q' задают самостоятельную форму текстовых стилей.
Число: Если буква указана один раз, значение выводится с минимальным количеством цифр и без заполнения. В противном случае количество цифр задаёт ширину выходного поля; при необходимости значение дополняется нулями слева. Для следующих букв шаблона число повторений ограничено. Буквы 'c' и 'F' можно указать только один раз. Буквы 'd', 'H', 'h', 'K', 'k', 'm' и 's' можно указать не более двух раз. Букву 'D' можно указать не более трёх раз.
Число/текст: Если буква шаблона указана три раза или чаще, применяются приведённые выше правила для текста. В противном случае применяются правила для чисел.
Дробь: Поле наносекунд секунды выводится как доля секунды. Значение наносекунд секунды содержит девять цифр, поэтому букву шаблона можно указать от одного до девяти раз. Если она указана менее девяти раз, значение наносекунд секунды усекается и выводятся только старшие цифры.
Год: Количество букв задаёт минимальную ширину поля, при меньшем значении которой выполняется заполнение. Если буква указана два раза, используется двухзначный формат reduced. При форматировании выводятся две последние цифры. При разборе используется базовое значение 2000, поэтому год попадает в диапазон от 2000 до 2099 включительно. Если букв указано меньше четырёх (но не две), знак для отрицательных лет выводится согласно SignStyle.NORMAL. В остальных случаях знак выводится, если превышена ширина заполнения, согласно SignStyle.EXCEEDS_PAD.
ZoneId: Выводится идентификатор часового пояса, например 'Europe/Paris'. Если буква указана два раза, выводится идентификатор часового пояса. Любое другое количество букв приводит к исключению IllegalArgumentException.
Названия зон: Выводится отображаемое название идентификатора часового пояса. Если буква шаблона — 'z', выводится название зоны с учётом перехода на летнее время. Если данных недостаточно, чтобы определить, применяется ли летнее время, используется название без учёта перехода на летнее время. Если буква указана один, два или три раза, выводится краткое название. Если буква указана четыре раза, выводится полное название. Пять или более букв приводят к исключению IllegalArgumentException.
Если буква шаблона — 'v', выводится название зоны без учёта перехода на летнее время. Если буква указана один раз, выводится краткое название. Если буква указана четыре раза, выводится полное название. Два, три, а также пять или более букв приводят к исключению IllegalArgumentException.
Смещения X и x: Формат смещения зависит от количества букв шаблона. Одна буква выводит только часы, например '+01', если только минуты не равны нулю; в последнем случае выводятся также минуты, например '+0130'. Две буквы выводят часы и минуты без двоеточия, например '+0130'. Три буквы выводят часы и минуты с двоеточием, например '+01:30'. Четыре буквы выводят часы и минуты, а также секунды, если они ненулевые, без двоеточия, например '+013015'. Пять букв выводят часы и минуты, а также секунды, если они ненулевые, с двоеточием, например '+01:30:15'. Шесть или более букв приводят к исключению IllegalArgumentException. Буква шаблона 'X' (верхнего регистра) выводит 'Z', если выводимое смещение равно нулю; буква шаблона 'x' (нижнего регистра) выводит '+00', '+0000' или '+00:00'.
Смещение O: Для ненулевого смещения формат локализованного смещения зависит от количества букв шаблона. Одна буква выводит краткую форму локализованного смещения — локализованный текст смещения, например 'GMT', с часом без ведущего нуля, необязательными минутами из двух цифр и секундами, если они ненулевые, и двоеточием; например, 'GMT+8'. Четыре буквы выводят полную форму — локализованный текст смещения, например 'GMT', с полями часа и минуты из двух цифр, необязательным полем секунд, если они ненулевые, и двоеточием; например, '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 |
Форматирует объект даты и времени с помощью этого форматтера. |
void |
formatTo |
Форматирует объект даты и времени в 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 |
Возвращает копию этого форматтера с новым переопределяющим часовым поясом. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из следующих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного промежутка реального времени. |
Подробное описание полей
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(CharSequence, 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_LOCAL_TIME- Если смещение недоступно, формат завершён.
offset ID. Если смещение содержит секунды, они также будут обработаны, хотя это не предусмотрено стандартом ISO-8601. Разбор смещения выполняется в нестрогом режиме, поэтому минуты и секунды могут отсутствовать. Регистр символов при разборе не учитывается.
Поскольку этот форматтер содержит необязательный элемент, для разбора может потребоваться использовать parseBest(CharSequence, 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(CharSequence, 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(CharSequence, 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(CharSequence, TemporalQuery...).
Возвращаемый форматтер использует хронологию ISO, чтобы даты в других календарных системах преобразовывались правильно. Он не переопределяет часовой пояс и использует стиль разрешения STRICT.
ISO_INSTANT
public static final DateTimeFormatter ISO_INSTANT
Возвращает неизменяемый форматтер, способный форматировать и анализировать формат мгновения ISO-8601. При форматировании к мгновению всегда добавляется суффикс 'Z', указывающий на UTC. Секунды всегда выводятся. Для наносекунд выводится ноль, три, шесть или девять цифр, в зависимости от необходимости. При разборе для обработки смещения будет использоваться нестрогий режим метода appendOffset("+HH", "Z"); при необходимости мгновение будет преобразовано в 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(CharSequence, 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.
- Параметры:
-
pattern— используемый шаблон, не null -
locale— используемая локаль, не null - Возвращает:
- форматтер, созданный на основе шаблона, не null
- Исключения:
-
IllegalArgumentException— если шаблон недопустим - См. также:
ofLocalizedDate
public static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle)
Возвращает форматтер, который форматирует или анализирует дату. Точный шаблон формата зависит от локали.
Локаль определяется форматтером. Форматтер, непосредственно возвращаемый этим методом, использует default FORMAT locale. Локаль можно задать с помощью withLocale(Locale) для результата этого метода.
Обратите внимание, что локализованный шаблон ищется отложенно. Этот DateTimeFormatter хранит требуемый стиль и локаль, а нужный шаблон ищется по мере необходимости.
Возвращаемый форматтер использует хронологию ISO, чтобы даты в других календарных системах преобразовывались правильно. Он не переопределяет часовой пояс и использует стиль разрешения SMART.
- Параметры:
-
dateStyle— требуемый стиль форматтера, не null - Возвращает:
- форматтер даты, не null
ofLocalizedTime
public static DateTimeFormatter ofLocalizedTime(FormatStyle timeStyle)
Возвращает форматтер, который форматирует или анализирует время. Точный шаблон формата зависит от локали.
Локаль определяется форматтером. Форматтер, непосредственно возвращаемый этим методом, использует default FORMAT locale. Локаль можно задать с помощью withLocale(Locale) для результата этого метода.
Обратите внимание, что локализованный шаблон ищется отложенно. Этот DateTimeFormatter хранит требуемый стиль и локаль, а нужный шаблон ищется по мере необходимости.
Возвращаемый форматтер использует хронологию ISO, чтобы даты в других календарных системах преобразовывались правильно. Он не переопределяет часовой пояс и использует стиль разрешения SMART. Для стилей FULL и LONG обычно требуется часовой пояс. При форматировании с использованием этих стилей должен быть доступен ZoneId, заданный с помощью ZonedDateTime или withZone(ZoneId).
- Параметры:
-
timeStyle— требуемый стиль форматтера, не null - Возвращает:
- форматтер времени, не null
ofLocalizedDateTime
public static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateTimeStyle)
Возвращает форматтер, который форматирует или анализирует дату и время. Точный шаблон формата зависит от локали.
Локаль определяется форматтером. Форматтер, непосредственно возвращаемый этим методом, использует default FORMAT locale. Локаль можно задать с помощью withLocale(Locale) для результата этого метода.
Обратите внимание, что локализованный шаблон ищется отложенно. Этот DateTimeFormatter хранит требуемый стиль и локаль, а нужный шаблон ищется по мере необходимости.
Возвращаемый форматтер использует хронологию ISO, чтобы даты в других календарных системах преобразовывались правильно. Он не переопределяет часовой пояс и использует стиль разрешения SMART. Для стилей FULL и LONG обычно требуется часовой пояс. При форматировании с использованием этих стилей должен быть доступен ZoneId, заданный с помощью ZonedDateTime или withZone(ZoneId).
- Параметры:
-
dateTimeStyle— требуемый стиль форматтера, не null - Возвращает:
- форматтер даты и времени, не null
ofLocalizedDateTime
public static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateStyle, FormatStyle timeStyle)
Возвращает форматтер, который форматирует или анализирует дату и время. Точный шаблон формата зависит от локали.
Локаль определяется форматтером. Форматтер, непосредственно возвращаемый этим методом, использует default FORMAT locale. Локаль можно задать с помощью withLocale(Locale) для результата этого метода.
Обратите внимание, что локализованный шаблон ищется отложенно. Этот DateTimeFormatter хранит требуемый стиль и локаль, а нужный шаблон ищется по мере необходимости.
Возвращаемый форматтер использует хронологию ISO, чтобы даты в других календарных системах преобразовывались правильно. Он не переопределяет часовой пояс и использует стиль разрешения SMART. Для стилей FULL и LONG обычно требуется часовой пояс. При форматировании с использованием этих стилей должен быть доступен ZoneId, заданный с помощью ZonedDateTime или withZone(ZoneId).
- Параметры:
-
dateStyle— требуемый стиль форматтера даты, не null -
timeStyle— требуемый стиль форматтера времени, не null - Возвращает:
- форматтер даты, времени или даты и времени, не 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.
- Параметры:
-
requestedTemplate— запрошенный шаблон, не null - Возвращает:
- форматтер на основе шаблона
requestedTemplate, не null - Исключения:
-
IllegalArgumentException— еслиrequestedTemplateнедопустим - Начиная с версии:
- 19
- Внешние спецификации
- См. также:
parsedExcessDays
public static final TemporalQuery<Period> parsedExcessDays()
Возвращает singleton-запрос, предоставляющий доступ к дополнительной информации о разборе. Запрос всегда возвращает ненулевой период; вместо null возвращается нулевой период.
Есть две ситуации, в которых этот запрос может вернуть ненулевой период.
- Если
ResolverStyleимеет значениеLENIENTи время разбирается без даты, полный результат разбора состоит изLocalTimeи избыточногоPeriodв днях. - Если
ResolverStyleимеет значениеSMARTи время разбирается без даты, причем время равно 24:00:00, полный результат разбора состоит изLocalTimeсо значением 00: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());
- Возвращает:
- запрос, предоставляющий доступ к избыточным дням, полученным при разборе
parsedLeapSecond
public static final TemporalQuery<Boolean> parsedLeapSecond()
Возвращает singleton-запрос, предоставляющий доступ к дополнительной информации о разборе. Запрос всегда возвращает ненулевое логическое значение: 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
}
- Возвращает:
- запрос, позволяющий определить, был ли разобран високосный секундный интервал
getLocale
public Locale getLocale()
Она используется для поиска элементов форматтера, требующих локализации, например текста или локализованного шаблона.
- Возвращает:
- локаль этого форматтера, не null
withLocale
public DateTimeFormatter withLocale(Locale locale)
Она используется для поиска элементов форматтера, требующих локализации, например текста или локализованного шаблона.
Локаль сохраняется в переданном виде, без дополнительной обработки. Если локаль содержит расширения Unicode, они могут использоваться при последующей обработке текста. Чтобы задать хронологию, часовой пояс и десятичный стиль из расширений Unicode, см. localizedBy().
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
locale— новая локаль, не null - Возвращает:
- форматтер на основе этого форматтера с запрошенной локалью, не null
- См. также:
localizedBy
public DateTimeFormatter localizedBy(Locale locale)
Метод используется для поиска элементов форматтера, требующих локализации, например текста или локализованного шаблона. Если локаль содержит расширения Unicode "ca" (календарь), "nu" (система счисления), "rg" (переопределение региона) и/или "tz" (часовой пояс), переопределяются хронология, система счисления и/или зона. Если указаны оба расширения — "ca" и "rg", хронология из расширения "ca" имеет приоритет над неявно заданной расширением "rg". То же относится к расширению "nu".
В отличие от метода withLocale, вызов этого метода может привести к созданию другого форматтера в зависимости от порядка вызова методов withXXXX() в цепочке.
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
locale— локаль, не null - Возвращает:
- форматтер на основе этого форматтера с локализованными значениями календаря, десятичного стиля и/или часового пояса, которые имеют приоритет над значениями этого форматтера.
- Начиная с версии:
- 10
- См. также:
getDecimalStyle
public DecimalStyle getDecimalStyle()
- Возвращает:
- DecimalStyle этого форматтера, не null
withDecimalStyle
public DateTimeFormatter withDecimalStyle(DecimalStyle decimalStyle)
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
decimalStyle— новый DecimalStyle, не null - Возвращает:
- форматтер на основе этого форматтера с запрошенным DecimalStyle, не null
getChronology
public Chronology getChronology()
Возвращает переопределенную хронологию, используемую для преобразования дат. По умолчанию форматтер не имеет переопределенной хронологии и возвращает null. Дополнительные сведения о переопределении см. в разделе withChronology(Chronology).
- Возвращает:
- переопределенная хронология этого форматтера или null, если переопределение отсутствует
withChronology
public DateTimeFormatter withChronology(Chronology chrono)
Возвращает форматтер с состоянием, аналогичным состоянию этого форматтера, но с заданной переопределяющей хронологией. По умолчанию форматтер не имеет переопределенной хронологии и возвращает null.
Добавление переопределения влияет на любую форматируемую или разбираемую дату.
При форматировании, если временной объект содержит дату, она будет преобразована в дату переопределяющей хронологии. Наличие даты во временном объекте определяется путем запроса поля EPOCH_DAY. Любые значения времени или зоны сохраняются без изменений, если они не переопределены.
Если временной объект не содержит дату, но содержит одно или несколько полей даты ChronoField, выбрасывается исключение DateTimeException. Во всех остальных случаях переопределяющая хронология добавляется к временному объекту, заменяя любую предыдущую хронологию, но не изменяя дату и время.
При разборе необходимо учитывать два отдельных случая. Если хронология была разобрана непосредственно из текста, возможно, потому что использовался метод DateTimeFormatterBuilder.appendChronologyId(), эта переопределяющая хронология не действует. Если зона не была разобрана, эта переопределяющая хронология будет использоваться для интерпретации значений ChronoField в качестве даты согласно правилам разрешения дат данной хронологии.
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
chrono— новая хронология или null, если переопределение отсутствует - Возвращает:
- форматтер на основе этого форматтера с запрошенной переопределяющей хронологией, не null
getZone
public ZoneId getZone()
Возвращает переопределенную зону, используемую для преобразования моментов времени. По умолчанию форматтер не имеет переопределенной зоны и возвращает null. Дополнительные сведения о переопределении см. в разделе withZone(ZoneId).
- Возвращает:
- переопределенная зона этого форматтера или null, если переопределение отсутствует
withZone
public DateTimeFormatter withZone(ZoneId zone)
Возвращает форматтер с состоянием, аналогичным состоянию этого форматтера, но с заданной переопределяющей зоной. По умолчанию форматтер не имеет переопределенной зоны и возвращает null.
Добавление переопределения влияет на любой форматируемый или разбираемый момент времени.
При форматировании, если временной объект содержит момент времени, он будет преобразован в дату-время с часовым поясом с использованием переопределяющей зоны. Наличие момента времени во временном объекте определяется путем запроса поля INSTANT_SECONDS. Если входные данные содержат хронологию, она сохраняется, если не переопределена. Если входные данные не содержат хронологию, например Instant, используется ISO-хронология.
Если временной объект не содержит момента времени, но содержит смещение, выполняется дополнительная проверка. Если нормализованная переопределяющая зона является смещением, отличающимся от смещения временного объекта, выбрасывается исключение DateTimeException. Во всех остальных случаях переопределяющая зона добавляется к временному объекту, заменяя любую предыдущую зону, но не изменяя дату и время.
При разборе необходимо учитывать два отдельных случая. Если зона была разобрана непосредственно из текста, возможно, потому что использовался метод DateTimeFormatterBuilder.appendZoneId(), эта переопределяющая зона не действует. Если зона не была разобрана, переопределяющая зона будет включена в результат разбора, где ее можно использовать для построения моментов времени и даты-времени.
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
zone— новая переопределяющая зона или null, если переопределение отсутствует - Возвращает:
- форматтер на основе этого форматтера с запрошенной переопределяющей зоной, не null
getResolverStyle
public ResolverStyle getResolverStyle()
Возвращает стиль разрешения, используемый на втором этапе разбора, когда поля преобразуются в даты и время. По умолчанию форматтер использует стиль разрешения SMART. Дополнительные сведения см. в разделе withResolverStyle(ResolverStyle).
- Возвращает:
- стиль разрешения этого форматтера, не null
withResolverStyle
public DateTimeFormatter withResolverStyle(ResolverStyle resolverStyle)
Возвращает форматтер с состоянием, аналогичным состоянию этого форматтера, но с заданным стилем разрешения. По умолчанию форматтер использует стиль разрешения SMART.
Изменение стиля разрешения влияет только на разбор. Разбор текстовой строки выполняется в два этапа. На первом этапе выполняется базовый разбор текста согласно полям, добавленным в построитель. На втором этапе разобранные пары «поле — значение» преобразуются в объекты даты и/или времени. Стиль разрешения определяет, как выполняется второй этап — разрешение. Дополнительные сведения о доступных параметрах см. в разделе ResolverStyle.
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
resolverStyle— новый стиль разрешения, не null - Возвращает:
- форматтер на основе этого форматтера с запрошенным стилем разрешения, не null
getResolverFields
public Set<TemporalField> getResolverFields()
Возвращает поля разрешения, используемые на втором этапе разбора, когда поля преобразуются в даты и время. По умолчанию форматтер не имеет полей разрешения и поэтому возвращает null. Дополнительные сведения см. в разделе withResolverFields(Set).
- Возвращает:
- неизменяемый набор полей разрешения этого форматтера или null, если полей нет
withResolverFields
public DateTimeFormatter withResolverFields(TemporalField... resolverFields)
Возвращает форматтер с состоянием, аналогичным состоянию этого форматтера, но с заданными полями разрешения. По умолчанию форматтер не имеет полей разрешения.
Изменение полей разрешения влияет только на разбор. Разбор текстовой строки выполняется в два этапа. На первом этапе выполняется базовый разбор текста согласно полям, добавленным в построитель. На втором этапе разобранные пары «поле — значение» преобразуются в объекты даты и/или времени. Поля разрешения используются для фильтрации пар «поле — значение» между первым и вторым этапами.
Это можно использовать для выбора одного из двух или более способов разрешения даты или времени. Например, если форматтер включает год, месяц, день месяца и день года, дату можно разрешить двумя способами. Вызов этого метода с аргументами YEAR и DAY_OF_YEAR обеспечит разрешение даты с использованием года и дня года; это означает, что месяц и день месяца будут игнорироваться на этапе разрешения.
Аналогичным образом этот метод можно использовать, чтобы игнорировать второстепенные поля, которые иначе подвергались бы перекрестной проверке. Например, если форматтер включает год, месяц, день месяца и день недели, дату можно разрешить только одним способом, но разобранное значение дня недели будет сверяться с разрешенной датой. Вызов этого метода с аргументами YEAR, MONTH_OF_YEAR и DAY_OF_MONTH обеспечит правильное разрешение даты без перекрестной проверки дня недели.
С точки зрения реализации этот метод работает следующим образом. Результат этапа разбора можно рассматривать как отображение полей в значения. Этот метод фильтрует такое отображение между первым и вторым этапами, удаляя все поля, кроме указанных в аргументах метода.
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
resolverFields— новый набор полей разрешения или null, если полей нет - Возвращает:
- форматтер на основе этого форматтера с запрошенным стилем разрешения, не null
withResolverFields
public DateTimeFormatter withResolverFields(Set<TemporalField> resolverFields)
Возвращает форматтер с состоянием, аналогичным состоянию этого форматтера, но с заданными полями разрешения. По умолчанию форматтер не имеет полей разрешения.
Изменение полей разрешения влияет только на разбор. Разбор текстовой строки выполняется в два этапа. На первом этапе выполняется базовый разбор текста согласно полям, добавленным в построитель. На втором этапе разобранные пары «поле — значение» преобразуются в объекты даты и/или времени. Поля разрешения используются для фильтрации пар «поле — значение» между первым и вторым этапами.
Это можно использовать для выбора одного из двух или более способов разрешения даты или времени. Например, если форматтер включает год, месяц, день месяца и день года, дату можно разрешить двумя способами. Вызов этого метода с аргументами YEAR и DAY_OF_YEAR обеспечит разрешение даты с использованием года и дня года; это означает, что месяц и день месяца будут игнорироваться на этапе разрешения.
Аналогичным образом этот метод можно использовать, чтобы игнорировать второстепенные поля, которые иначе подвергались бы перекрестной проверке. Например, если форматтер включает год, месяц, день месяца и день недели, дату можно разрешить только одним способом, но разобранное значение дня недели будет сверяться с разрешенной датой. Вызов этого метода с аргументами YEAR, MONTH_OF_YEAR и DAY_OF_MONTH обеспечит правильное разрешение даты без перекрестной проверки дня недели.
С точки зрения реализации этот метод работает следующим образом. Результат этапа разбора можно рассматривать как отображение полей в значения. Этот метод фильтрует такое отображение между первым и вторым этапами, удаляя все поля, кроме указанных в аргументах метода.
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
resolverFields— новый набор полей разрешения или null, если полей нет - Возвращает:
- форматтер на основе этого форматтера с запрошенным стилем разрешения, не null
format
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— объект Appendable, в который выполняется форматирование, не null - Исключения:
-
DateTimeException— если при форматировании произошла ошибка
parse
public TemporalAccessor parse(CharSequence text)
Разбирает весь текст и создает временной объект. Обычно удобнее использовать parse(CharSequence, TemporalQuery). Результатом этого метода является TemporalAccessor, которое прошло разрешение с применением базовых проверок, помогающих убедиться в корректности даты и времени.
Если разбор завершается, не считав весь текст, или во время разбора либо объединения возникает проблема, выбрасывается исключение.
- Параметры:
-
text— текст для разбора, не null - Возвращает:
- разобранный временной объект, не null
- Исключения:
-
DateTimeParseException— если не удалось разобрать запрошенный результат
parse
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— если указано менее двух типов -
DateTimeParseException— если не удалось разобрать запрошенный результат
parseUnresolved
public TemporalAccessor parseUnresolved(CharSequence text, ParsePosition position)
Разбор выполняется в два этапа. Сначала текст разбирается с использованием структуры, заданной форматтером, в результате чего создаются Map «поле — значение», ZoneId и Chronology. Затем разобранные данные разрешаются: различные поля проверяются, объединяются и упрощаются до более полезных. Этот метод выполняет этап разбора, но не этап разрешения.
Результатом этого метода является TemporalAccessor, представляющий данные в том виде, в каком они присутствуют во входных данных. Значения не проверяются, поэтому разбор строки даты '2012-00-65' приведёт к созданию временного объекта с тремя полями: годом '2012', месяцем '0' и днём месяца '65'.
Текст будет разобран начиная с указанной начальной позиции ParsePosition. Весь текст разбирать необязательно: ParsePosition будет обновлён индексом, указывающим конец разбора.
Ошибки возвращаются в поле индекса ошибки объекта ParsePosition, а не через DateTimeParseException. Возвращаемый индекс ошибки будет установлен в значение, указывающее на место ошибки. Перед использованием результата вызывающий код должен проверить наличие ошибок.
Если форматтер разбирает одно и то же поле несколько раз с разными значениями, результатом будет ошибка.
Этот метод предназначен для сложных случаев использования, в которых требуется доступ к внутреннему состоянию во время разбора. В обычном прикладном коде следует использовать 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(CharSequence).
Исключения соответствуют определениям Format; подробные сведения о IllegalArgumentException при форматировании и о ParseException или null при разборе см. в описании этих методов. Формат не поддерживает назначение атрибутов возвращаемой строке форматирования.
- Параметры:
-
parseQuery— запрос, определяющий тип для разбора, не null - Возвращает:
- этот форматтер в виде экземпляра классического формата, не null
toString
© 1993, 2025, 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.