Класс 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 | эра | текст | AD; Anno Domini; A |
| 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 | час (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 | общее имя часового пояса | имя часового пояса | Тихоокеанское время; 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', выводится имя часового пояса, учитывающее летнее время. Если нет достаточной информации для определения применения летнего времени, используется имя без учета летнего времени. Если количество букв равно одному, двум или трём, выводится короткое имя. Если количество букв равно четырём, выводится полное имя. Пять или более букв вызывают 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...) позволяет отфильтровать набор полей, которые будут разрешены, прежде чем начнется разрешение. Например, если форматер проанализировал год, месяц, день месяца и день года, то существуют два подхода к разрешению даты: (год + месяц + день месяца) и (год + день года). Параметр resolver fields позволяет выбрать один из двух подходов. Если параметры resolver fields не заданы, оба подхода должны привести к одной и той же дате.
Разрешение отдельных полей для формирования полной даты и времени — это сложный процесс с поведением, распределенным по нескольким классам. Он выполняет следующие шаги:
- Определяется хронология. Хронология результата — это либо хронология, которая была проанализирована, либо, если хронология не была проанализирована, это хронология, установленная в этом классе, либо, если она равна null, это
IsoChronology. - Разрешаются поля даты
ChronoField. Это достигается с помощьюChronology.resolveDate(Map, ResolverStyle). Документация по разрешению полей находится в реализацииChronology. - Разрешаются поля времени
ChronoField. Это документировано вChronoFieldи одинаково для всех хронологий. - Обрабатываются любые поля, которые не являются
ChronoField. Это достигается с помощьюTemporalField.resolve(Map, TemporalAccessor, ResolverStyle). Документация по разрешению полей находится в реализацииTemporalField. - Поля даты и времени
ChronoFieldповторно разрешаются. Это позволяет полям на шаге четыре создаватьChronoFieldзначения и обрабатывать их в даты и время. - Формируется
LocalTime, если доступен хотя бы час дня. Это включает в себя предоставление значений по умолчанию для минуты, секунды и дробной части секунды. - Любые оставшиеся неразрешенные поля проверяются на соответствие любой дате и/или времени, которая была разрешена. Таким образом, на более ранней стадии будет разрешено (год + месяц + день месяца) в дату, и на этой стадии будет проверяться, является ли день недели допустимым для даты.
- Если был проанализирован избыток дней excess number of days, то он добавляется к дате, если дата доступна.
- Если присутствует поле, основанное на секундах, но
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 |
Возвращает копию этого форматтера с новым приоритетным часовым поясом. |
Подробное описание полей
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_DATE - Смещение
offset 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_TIME - Смещение
offset ID. Если смещение содержит секунды, то они обрабатываются, даже если это не часть стандарта ISO-8601. Анализ нечувствителен к регистру.
Возвращаемый форматтер не имеет переопределённой хронологии или зоны. Он использует стиль анализа STRICT.
ISO_TIME
public static final DateTimeFormatter ISO_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат времени со смещением ISO-8601. Формат состоит из:
- Формат
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_TIME - Смещение
offset 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. Вторая минуты всегда выводится. Наносекунды выводится 0, 3, 6 или 9 цифр по мере необходимости. При анализе используется поведение 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.
- Параметры:
-
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 обычно требуют часового пояса. При форматировании с использованием этих стилей должен быть доступен часовой пояс, либо используя ZonedDateTime, либо withZone(java.time.ZoneId).
- Параметры:
-
timeStyle- стиль форматера, который нужно получить, не null - Возвращает:
- форматер времени, не null
ofLocalizedDateTime
public static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateTimeStyle)
Это возвращает форматер, который будет форматировать или анализировать дату и время. Точный шаблон формата зависит от локали.
Локаль определяется форматером. Форматер, возвращаемый непосредственно этим методом, будет использовать default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) на результате этого метода.
Обратите внимание, что локализованный шаблон ищется лениво. Это DateTimeFormatter хранит требуемый стиль и локаль, ищет необходимый шаблон по запросу.
Возвращаемый форматер имеет хронологию ISO, чтобы гарантировать правильное преобразование дат в других календарных системах. Он не имеет переопределённой зоны и использует стиль разрешения SMART. Стиль FULL и LONG обычно требуют часового пояса. При форматировании с использованием этих стилей должен быть доступен часовой пояс, либо используя ZonedDateTime, либо withZone(java.time.ZoneId).
- Параметры:
-
dateTimeStyle- стиль форматера, который нужно получить, не null - Возвращает:
- форматер даты и времени, не null
ofLocalizedDateTime
public static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateStyle, FormatStyle timeStyle)
Это возвращает форматер, который будет форматировать или анализировать дату и время. Точный шаблон формата зависит от локали.
Локаль определяется форматером. Форматер, возвращаемый непосредственно этим методом, будет использовать default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) на результате этого метода.
Обратите внимание, что локализованный шаблон ищется лениво. Это DateTimeFormatter хранит требуемый стиль и локаль, ищет необходимый шаблон по запросу.
Возвращаемый форматер имеет хронологию ISO, чтобы гарантировать правильное преобразование дат в других календарных системах. Он не имеет переопределённой зоны и использует стиль разрешения SMART. Стиль FULL и LONG обычно требуют часового пояса. При форматировании с использованием этих стилей должен быть доступен часовой пояс, либо используя ZonedDateTime, либо withZone(java.time.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()
Возвращает единственный экземпляр запроса, предоставляющего доступ к дополнительной информации из разбора. Запрос всегда возвращает непустой период, возвращая нулевой период вместо 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());
- Возвращает:
- запрос, предоставляющий доступ к дополнительным дням, которые были распарсены
parsedLeapSecond
public static final TemporalQuery<Boolean> parsedLeapSecond()
Возвращает единственный экземпляр запроса, предоставляющего доступ к дополнительной информации из разбора. Запрос всегда возвращает логическое значение, 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)
Используется для поиска любой части форматировщика, требующей конкретной локализации, например, текста или локализованного шаблона. Если локаль содержит расширения "ca" (календарь), "nu" (система нумерации), "rg" (переопределение региона) и/или "tz" (часовой пояс) Unicode расширений, хронология, система нумерации и/или пояс переопределяются. Если указаны оба "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, если нет переопределения
с зоной
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.
Изменение стиля разрешения влияет только при анализе. Анализ строки текста происходит в две фазы. Фаза 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
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— если указано менее 2 типов -
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(java.lang.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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/time/format/DateTimeFormatter.html