Класс 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 | идентификатор часового пояса | id часового пояса | 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...) позволяет отфильтровать набор полей, которые будут разрешены, прежде чем начнется разрешение. Например, если форматировщик проанализировал год, месяц, число и день года, то есть два подхода к разрешению даты: (год + месяц + число) и (год + день года). Поля разрешения позволяют выбрать один из двух подходов. Если поля разрешения не установлены, оба подхода должны привести к одной и той же дате.
Разрешение отдельных полей для формирования полной даты и времени — сложный процесс с поведением, распределённым по нескольким классам. Он выполняет следующие шаги:
- Определяется хронология. Хронология результата — это либо хронология, которая была проанализирована, либо, если хронология не была проанализирована, это хронология, установленная в этом классе, либо, если она равна 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).
- Требования к реализации:
- Этот класс неизменяемый и потокобезопасный.
- С:
- 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<TemporalField> |
getResolverFields() |
Возвращает поля разрешения, используемые при анализе. |
ResolverStyle |
getResolverStyle() |
Возвращает стиль разрешения, используемый при анализе. |
ZoneId |
getZone() |
Возвращает переопределённый часовой пояс, используемый при форматировании. |
DateTimeFormatter |
localizedBy |
Возвращает копию этого форматировщика с локализованными значениями локали, календаря, региона, стиля десятичных знаков и/или часового пояса, которые переопределяют значения в этом форматировщике. |
static DateTimeFormatter |
ofLocalizedDate |
Возвращает локально-специфический формат даты для хронологии ISO. |
static DateTimeFormatter |
ofLocalizedDateTime |
Возвращает локально-специфический форматировщик даты и времени для хронологии ISO. |
static DateTimeFormatter |
ofLocalizedDateTime |
Возвращает локально-специфический формат даты и времени для хронологии ISO. |
static DateTimeFormatter |
ofLocalizedTime |
Возвращает локально-специфический формат времени для хронологии ISO. |
static DateTimeFormatter |
ofPattern |
Создаёт форматировщик, используя указанный шаблон. |
static DateTimeFormatter |
ofPattern |
Создаёт форматировщик, используя указанный шаблон и локаль. |
TemporalAccessor |
parse |
Полностью анализирует текст, создавая временной объект. |
TemporalAccessor |
parse |
Анализирует текст с помощью этого форматировщика, предоставляя контроль над позицией текста. |
<T> T |
parse |
Полностью анализирует текст, создавая объект указанного типа. |
TemporalAccessor |
parseBest |
Полностью анализирует текст, создавая объект одного из указанных типов. |
static final TemporalQuery<Period> |
parsedExcessDays() |
Запрос, предоставляющий доступ к лишним дням, которые были проанализированы. |
static final TemporalQuery<Boolean> |
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 будут дополнены нулями до четырёх цифр. Годы за пределами этого диапазона будут иметь префиксный положительный или отрицательный знак. - Дефис
- Две цифры для
month-of-year. Они дополняются нулём до двух цифр. - Дефис
- Две цифры для
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 формат, указывающий часовой пояс. Формат состоит из:
- Формата
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. - Если идентификатор часового пояса недоступен или является
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 будут дополнены нулями слева, чтобы гарантировать четыре цифры. Годы за пределами этого диапазона будут иметь префиксный знак плюс или минус. - Дефис
- Три цифры для
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 будут дополнены нулями слева, чтобы гарантировать четыре цифры. Годы за пределами этого диапазона будут иметь префиксный знак плюс или минус. - Дефис
- Буква 'W'. Анализ регистронезависимый.
- Две цифры для
week-of-week-based-year. Дополняется нулями слева, чтобы гарантировать две цифры. - Дефис
- Одна цифра для
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 при необходимости. Время до поля секунд обязательно. Дробные секунды от 0 до 9 анализируются. Локализованный десятичный стиль не используется.
Это особый форматировщик, предназначенный для отображения удобочитаемой формы Instant. Класс Instant предназначен только для представления момента во времени и внутренне хранит значение в наносекундах с фиксированной эпохой 1970-01-01Z. Поэтому Instant не может быть отформатирован как дата или время без указания часового пояса. Этот форматировщик позволяет отформатировать Instant путём предоставления соответствующего преобразования с использованием ZoneOffset.UTC.
Формат состоит из:
- Форматировщика
ISO_OFFSET_DATE_TIME, где момент преобразуется изChronoField.INSTANT_SECONDSиChronoField.NANO_OF_SECONDс использованием смещенияUTC. Анализ регистронезависимый.
Возвращаемый форматировщик не имеет переопределённой хронологии или зоны. Используется стиль разрешения STRICT.
BASIC_ISO_DATE
public static final DateTimeFormatter BASIC_ISO_DATE
Возвращает неизменяемый форматировщик, способный форматировать и анализировать базовый локальный формат даты ISO-8601. Формат состоит из:
- Четыре цифры для
year. Поддерживаются только годы в диапазоне от 0000 до 9999. - Две цифры для
month-of-year. Дополняется нулями слева, чтобы гарантировать две цифры. - Две цифры для
day-of-month. Дополняется нулями слева, чтобы гарантировать две цифры. - Если смещение недоступно для форматирования или анализа, то формат завершается.
- Идентификатор
offset IDбез двоеточий. Если смещение содержит секунды, они будут обработаны, хотя это не часть стандарта ISO-8601. Анализ смещения лояльный, что позволяет сделать минуты и секунды необязательными. Анализ регистронезависимый.
Поскольку у этого форматировщика есть необязательный элемент, может потребоваться анализ с использованием parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...).
Возвращаемый форматировщик имеет хронологию ISO, чтобы гарантировать правильное преобразование дат в других календарных системах. У него нет переопределённой зоны и используется стиль разрешения STRICT.
RFC_1123_DATE_TIME
public static final DateTimeFormatter RFC_1123_DATE_TIME
Возвращает неизменяемый форматировщик, способный форматировать и анализировать большую часть формата RFC-1123. RFC-1123 обновляет RFC-822, меняя год с двух цифр на четыре. Эта реализация требует четырёхзначного года. Эта реализация также не обрабатывает североамериканские или военные имена зон, только 'GMT' и величины смещения.
Формат состоит из:
- Если день недели недоступен для форматирования или анализа, перейти к дню месяца.
- Трехбуквенный
day-of-weekна английском языке. - Запятая
- Пробел
- Одна или две цифры для
day-of-month. - Пробел
- Трехбуквенный
month-of-yearна английском языке. - Пробел
- Четыре цифры для
year. Поддерживаются только годы в диапазоне от 0000 до 9999. - Пробел
- Две цифры для
hour-of-day. Дополняется нулями слева, чтобы гарантировать две цифры. - Двоеточие
- Две цифры для
minute-of-hour. Дополняется нулями слева, чтобы гарантировать две цифры. - Если секунды минуты недоступны, перейти к следующему пробелу.
- Двоеточие
- Две цифры для
second-of-minute. Дополняется нулями слева, чтобы гарантировать две цифры. - Пробел
- Идентификатор
offset IDбез двоеточий или секунд. Смещение ноль использует "GMT". Североамериканские имена зон и военные имена зон не обрабатываются.
Анализ регистронезависимый.
Возвращаемый форматировщик имеет хронологию ISO, чтобы гарантировать правильное преобразование дат в других календарных системах. У него нет переопределённой зоны и используется стиль разрешения SMART.
Методы
ofPattern
public static DateTimeFormatter ofPattern(String pattern)
Этот метод создаст форматировщик на основе простого шаблона букв и символов, как описано в документации класса. Например, d MMM uuuu отформатирует 2011-12-03 как '3 Dec 2011'.
Форматировщик будет использовать default FORMAT locale. Это можно изменить с помощью withLocale(Locale) на возвращаемом форматировщике. В качестве альтернативы используйте ofPattern(String, Locale) вариант этого метода.
Возвращаемый форматировщик не имеет переопределённой хронологии или зоны. Используется стиль разрешения SMART.
- Параметры:
-
pattern- используемый шаблон, не null - Возвращает:
- форматировщик, основанный на шаблоне, не null
- Исключения:
-
IllegalArgumentException- если шаблон недействителен - См. также:
ofPattern
public static DateTimeFormatter ofPattern(String pattern, Locale locale)
Этот метод создаст форматировщик, основанный на простом шаблоне букв и символов, как описано в документации класса. Например, d MMM uuuu будет форматировать 2011-12-03 как '3 Dec 2011'.
Форматировщик будет использовать указанные региональные настройки. Это можно изменить с помощью withLocale(Locale) на возвращённом форматировщике.
Возвращаемый форматировщик не имеет переопределённой хронологии или зоны. Он использует SMART стиль разрешения.
- Parameters:
-
pattern- шаблон для использования, не null -
locale- региональные настройки для использования, не null - Returns:
- форматировщик, основанный на шаблоне, не null
- Throws:
-
IllegalArgumentException- если шаблон некорректен - See Also:
ofLocalizedDate
public static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle)
Это возвращает форматировщик, который будет форматировать или анализировать дату. Точный шаблон форматирования зависит от региональных настроек.
Региональные настройки определяются форматировщиком. Форматировщик, возвращённый непосредственно этим методом, будет использовать default FORMAT locale. Региональные настройки можно контролировать с помощью withLocale(Locale) на результате этого метода.
Обратите внимание, что локализованный шаблон ищется лениво. Это DateTimeFormatter хранит необходимый стиль и региональные настройки, ищет необходимый шаблон по требованию.
Возвращаемый форматировщик имеет хронологию ISO, чтобы гарантировать правильное преобразование дат в других календарных системах. У него нет переопределённой зоны, и он использует SMART стиль разрешения.
- Parameters:
-
dateStyle- стиль форматировщика для получения, не null - Returns:
- форматировщик даты, не null
ofLocalizedTime
public static DateTimeFormatter ofLocalizedTime(FormatStyle timeStyle)
Это возвращает форматировщик, который будет форматировать или анализировать время. Точный шаблон форматирования зависит от региональных настроек.
Региональные настройки определяются форматировщиком. Форматировщик, возвращённый непосредственно этим методом, будет использовать default FORMAT locale. Региональные настройки можно контролировать с помощью withLocale(Locale) на результате этого метода.
Обратите внимание, что локализованный шаблон ищется лениво. Это DateTimeFormatter хранит необходимый стиль и региональные настройки, ищет необходимый шаблон по требованию.
Возвращаемый форматировщик имеет хронологию ISO, чтобы гарантировать правильное преобразование дат в других календарных системах. У него нет переопределённой зоны, и он использует SMART стиль разрешения. Стиль FULL и LONG обычно требуют часовой пояс. При форматировании с использованием этих стилей должен быть доступен ZoneId часовой пояс, либо с использованием ZonedDateTime либо withZone(java.time.ZoneId).
- Parameters:
-
timeStyle- стиль форматировщика для получения, не null - Returns:
- форматировщик времени, не null
ofLocalizedDateTime
public static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateTimeStyle)
Это возвращает форматировщик, который будет форматировать или анализировать дату и время. Точный шаблон форматирования зависит от региональных настроек.
Региональные настройки определяются форматировщиком. Форматировщик, возвращённый непосредственно этим методом, будет использовать default FORMAT locale. Региональные настройки можно контролировать с помощью withLocale(Locale) на результате этого метода.
Обратите внимание, что локализованный шаблон ищется лениво. Это DateTimeFormatter хранит необходимый стиль и региональные настройки, ищет необходимый шаблон по требованию.
Возвращаемый форматировщик имеет хронологию ISO, чтобы гарантировать правильное преобразование дат в других календарных системах. У него нет переопределённой зоны, и он использует SMART стиль разрешения. Стиль FULL и LONG обычно требуют часовой пояс. При форматировании с использованием этих стилей должен быть доступен ZoneId часовой пояс, либо с использованием ZonedDateTime либо withZone(java.time.ZoneId).
- Parameters:
-
dateTimeStyle- стиль форматировщика для получения, не null - Returns:
- форматировщик даты и времени, не null
ofLocalizedDateTime
public static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateStyle, FormatStyle timeStyle)
Это возвращает форматировщик, который будет форматировать или анализировать дату и время. Точный шаблон форматирования зависит от региональных настроек.
Региональные настройки определяются форматировщиком. Форматировщик, возвращённый непосредственно этим методом, будет использовать default FORMAT locale. Региональные настройки можно контролировать с помощью withLocale(Locale) на результате этого метода.
Обратите внимание, что локализованный шаблон ищется лениво. Это DateTimeFormatter хранит необходимый стиль и региональные настройки, ищет необходимый шаблон по требованию.
Возвращаемый форматировщик имеет хронологию ISO, чтобы гарантировать правильное преобразование дат в других календарных системах. У него нет переопределённой зоны, и он использует SMART стиль разрешения. Стиль FULL и LONG обычно требуют часовой пояс. При форматировании с использованием этих стилей должен быть доступен ZoneId часовой пояс, либо с использованием ZonedDateTime либо withZone(java.time.ZoneId).
- Parameters:
-
dateStyle- стиль форматировщика даты для получения, не null -
timeStyle- стиль форматировщика времени для получения, не null - Returns:
- форматировщик даты, времени или даты и времени, не null
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());
- Returns:
- запрос, обеспечивающий доступ к лишним дням, которые были проанализированы
parsedLeapSecond
public static final TemporalQuery<Boolean> parsedLeapSecond()
Это возвращает одиночный запрос, который предоставляет доступ к дополнительной информации из анализа. Запрос всегда возвращает ненулевой boolean, true, если анализ обнаружил високосную секунду, false - если нет.
Анализ момента времени обрабатывает специальное время "високосная секунда" '23:59:60'. Високосные секунды происходят в '23:59:60' в часовом поясе UTC, но в другое местное время в других часовых поясах. Чтобы избежать этой потенциальной неоднозначности, обработка високосных секунд ограничена DateTimeFormatterBuilder.appendInstant(), так как этот метод всегда анализирует момент времени с UTC смещением.
Если получено время '23:59:60', то применяется простое преобразование, заменяющее секунды минуты 60 на 59. Этот запрос может быть использован на результате анализа для определения того, была ли выполнена корректировка високосной секунды. Запрос вернёт true , если было произведено корректирование для удаления високосной секунды, и false если нет. Обратите внимание, что применение механизма сглаживания високосных секунд, такого как UTC-SLS, является обязанностью приложения, как следует:
TemporalAccessor parsed = formatter.parse(str);
Instant instant = parsed.query(Instant::from);
if (parsed.query(DateTimeFormatter.parsedLeapSecond())) {
// validate leap-second is correct and apply correct smoothing
}
- Returns:
- запрос, предоставляющий доступ к тому, была ли проанализирована високосная секунда
getLocale
public Locale getLocale()
Это используется для поиска любой части форматировщика, нуждающейся в конкретной локализации, например, текста или локализованного шаблона.
- Returns:
- региональные настройки этого форматировщика, не null
сLocale
public DateTimeFormatter withLocale(Locale locale)
Используется для поиска любой части форматера, требующей конкретной локализации, такой как текст или локализованный шаблон.
Языковой стандарт хранится как переданный, без дальнейшей обработки. Если языковой стандарт имеет расширения Юникода, они могут быть использованы позже при обработке текста. Чтобы установить хронологию, часовой пояс и десятичный стиль из расширений Юникода, см. localizedBy().
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Parameters:
-
locale- новый языковой стандарт, не null - Returns:
- форматер, основанный на этом форматере с запрошенным языковым стандартом, не null
- See Also:
localizedBy
public DateTimeFormatter localizedBy(Locale locale)
Используется для поиска любой части форматера, требующей конкретной локализации, такой как текст или локализованный шаблон. Если языковой стандарт содержит расширения "ca" (календарь), "nu" (система счисления), "rg" (переопределение региона) и/или "tz" (часовой пояс) расширения Юникода, хронология, система счисления и/или зона переопределяются. Если указаны оба "ca" и "rg", хронология из расширения "ca" заменяет неявную из расширения "rg". То же самое относится к расширению "nu".
В отличие от метода withLocale, вызов этого метода может привести к созданию другого форматера в зависимости от порядка цепочки вызовов с другими методами withXXXX().
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Parameters:
-
locale- языковой стандарт, не null - Returns:
- форматер, основанный на этом форматере с локализованными значениями календаря, десятичного стиля и/или часового пояса, которые заменяют значения в этом форматере.
- Since:
- 10
- See Also:
getDecimalStyle
public DecimalStyle getDecimalStyle()
- Returns:
- языковой стандарт этого форматера, не null
withDecimalStyle
public DateTimeFormatter withDecimalStyle(DecimalStyle decimalStyle)
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Parameters:
-
decimalStyle- новый DecimalStyle, не null - Returns:
- форматер, основанный на этом форматере с запрошенным DecimalStyle, не null
getChronology
public Chronology getChronology()
Возвращает хронологию переопределения, используемую для преобразования дат. По умолчанию, форматтер не имеет хронологии переопределения, возвращает null. См. withChronology(Chronology) для получения дополнительной информации о переопределении.
- Returns:
- хронологию переопределения этого форматера, null, если переопределения нет
withChronology
public DateTimeFormatter withChronology(Chronology chrono)
Возвращает форматер с похожим состоянием, как у этого форматера, но с установленной хронологией переопределения. По умолчанию, форматтер не имеет хронологии переопределения, возвращает null.
Если переопределение добавлено, то любая дата, которая форматируется или анализируется, будет затронута.
При форматировании, если временной объект содержит дату, то он будет преобразован в дату в хронологии переопределения. Определяется ли, содержит ли временной объект дату, посредством запроса к полю EPOCH_DAY. Любое время или зона сохраняются неизменными, если не переопределены.
Если временной объект не содержит дату, но содержит одно или несколько ChronoField полей даты, то выбрасывается DateTimeException. Во всех остальных случаях, хронология переопределения добавляется к временному объекту, заменяя любую предыдущую хронологию, но без изменения даты/времени.
При анализе следует рассмотреть два разных случая. Если хронология была проанализирована непосредственно из текста, возможно, потому что был использован DateTimeFormatterBuilder.appendChronologyId(), то это переопределение хронологии не имеет эффекта. Если зона не была проанализирована, то эта переопределяющая хронология будет использоваться для интерпретации ChronoField значений в дату в соответствии с правилами разрешения дат хронологии.
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Parameters:
-
chrono- новая хронология, null, если переопределения нет - Returns:
- форматер, основанный на этом форматере с запрошенной хронологией переопределения, не null
getZone
public ZoneId getZone()
Возвращает переопределенную зону, используемую для преобразования моментов времени. По умолчанию, форматтер не имеет переопределенной зоны, возвращает null. См. withZone(ZoneId) для получения дополнительной информации о переопределении.
- Returns:
- переопределяемую зону этого форматера, null, если переопределения нет
withZone
public DateTimeFormatter withZone(ZoneId zone)
Возвращает форматтер с похожим состоянием, как у этого форматера, но с установленной переопределяющей зоной. По умолчанию, форматтер не имеет переопределенной зоны, возвращает null.
Если переопределение добавлено, то любой момент времени, который форматируется или анализируется, будет затронут.
При форматировании, если временной объект содержит момент времени, то он будет преобразован в дату с зоной, используя переопределяющую зону. Определяется ли, является ли временной объект моментом времени, посредством запроса к полю INSTANT_SECONDS. Если у входных данных есть хронология, она сохранится, если не переопределена. Если у входных данных нет хронологии, например, Instant, то будет использоваться хронология ISO.
Если временной объект не содержит момента времени, но содержит смещение, то выполняется дополнительная проверка. Если переопределенная зона является смещением, которое отличается от смещения временного объекта, то выбрасывается DateTimeException. Во всех остальных случаях, переопределяющая зона добавляется к временному объекту, заменяя любую предыдущую зону, но без изменения даты/времени.
При анализе следует рассмотреть два разных случая. Если зона была проанализирована непосредственно из текста, возможно, потому что был использован DateTimeFormatterBuilder.appendZoneId(), то это переопределение зоны не имеет эффекта. Если зона не была проанализирована, то эта переопределяющая зона будет включена в результат анализа, где она может быть использована для построения моментов времени и дат.
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Parameters:
-
zone- новая переопределяющая зона, null, если переопределения нет - Returns:
- форматер, основанный на этом форматере с запрошенной переопределяющей зоной, не null
getResolverStyle
public ResolverStyle getResolverStyle()
Возвращает стиль разрешения, используемый во второй фазе анализа, когда поля разрешаются в даты и время. По умолчанию, у форматера есть стиль разрешения SMART. См. withResolverStyle(ResolverStyle) для получения дополнительной информации.
- Returns:
- стиль разрешения этого форматера, не null
withResolverStyle
public DateTimeFormatter withResolverStyle(ResolverStyle resolverStyle)
Возвращает форматтер с похожим состоянием, как у этого форматера, но со стилем разрешения. По умолчанию, у форматера есть стиль разрешения SMART.
Изменение стиля разрешения оказывает влияние только во время анализа. Анализ строкового текста происходит в двух фазах. Фаза 1 - это базовый анализ текста в соответствии с полями, добавленными в билдер. Фаза 2 разрешает пары поле-значение, проанализированные в объекты даты и/или времени. Стиль разрешения используется для управления тем, как происходит фаза 2, разрешение. См. ResolverStyle для получения дополнительной информации об имеющихся вариантах.
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Parameters:
-
resolverStyle- новый стиль разрешения, не null - Returns:
- форматер, основанный на этом форматере с запрошенным стилем разрешения, не null
getResolverFields
public Set<TemporalField> getResolverFields()
Возвращает поля разрешения, используемые во второй фазе анализа, когда поля разрешаются в даты и время. По умолчанию, у форматера нет полей разрешения, и, таким образом, возвращается null. См. withResolverFields(Set) для получения дополнительной информации.
- Returns:
- неизменяемый набор полей разрешения этого форматера, null, если полей нет
withResolverFields
public DateTimeFormatter withResolverFields(TemporalField... resolverFields)
Это возвращает форматер с состоянием, похожим на этот форматер, но с установленными полями разрешения. По умолчанию у форматера нет полей разрешения.
Изменение полей разрешения имеет эффект только во время парсинга. Парсинг текстовой строки происходит в две фазы. Фаза 1 — базовый парсинг текста в соответствии с полями, добавленными в билдер. Фаза 2 разрешает пары «поле-значение» в объекты даты и/или времени. Поля разрешения используются для фильтрации пар «поле-значение» между фазами 1 и 2.
Это можно использовать для выбора между двумя или более способами разрешения даты или времени. Например, если форматер состоит из года, месяца, дня месяца и дня года, то есть два способа разрешения даты. Вызов этого метода с аргументами YEAR и DAY_OF_YEAR гарантирует, что дата разрешается с использованием года и дня года, фактически означая, что месяц и день месяца игнорируются на стадии разрешения.
Аналогичным образом, этот метод можно использовать для игнорирования вторичных полей, которые в противном случае будут проверяться на пересечение. Например, если форматер состоит из года, месяца, дня месяца и дня недели, то существует только один способ разрешения даты, но значение, прочитанное для дня недели, будет проверятся на пересечение с разрешенной датой. Вызов этого метода с аргументами YEAR, MONTH_OF_YEAR и DAY_OF_MONTH гарантирует, что дата разрешается правильно, но без проверки на пересечение для дня недели.
С точки зрения реализации, этот метод работает следующим образом. Результат фазы парсинга можно рассматривать как карту «поле-значение». Действие этого метода заключается в том, чтобы отфильтровать эту карту между фазами 1 и 2, удалив все поля, кроме тех, которые указаны в качестве аргументов этого метода.
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Parameters:
-
resolverFields- новый набор полей разрешения, null, если полей нет - Returns:
- форматер, основанный на этом форматере с запрошенным стилем разрешения, не 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, удалив все поля, кроме тех, которые указаны в качестве аргументов этого метода.
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Parameters:
-
resolverFields- новый набор полей разрешения, null, если полей нет - Returns:
- форматер, основанный на этом форматере с запрошенным стилем разрешения, не null
format
public String format(TemporalAccessor temporal)
Это форматирует дату-время в строку по правилам форматера.
- Parameters:
-
temporal- объект временной метки для форматирования, не null - Returns:
- отформатированная строка, не null
- Throws:
-
DateTimeException- если во время форматирования произошла ошибка
formatTo
public void formatTo(TemporalAccessor temporal, Appendable appendable)
Appendable с помощью этого форматера. Это выводит отформатированную дату-время в указанный пункт назначения. Appendable — это интерфейс общего назначения, реализуемый всеми ключевыми классами вывода символов, включая StringBuffer, StringBuilder, PrintStream и Writer.
Хотя методы Appendable выбрасывают IOException, этот метод этого не делает. Вместо этого любая IOException оборачивается в исключение времени выполнения.
- Parameters:
-
temporal- объект временной метки для форматирования, не null -
appendable- добавляемый для форматирования, не null - Throws:
-
DateTimeException- если во время форматирования произошла ошибка
parse
public TemporalAccessor parse(CharSequence text)
Это анализирует весь текст, создавая временной объект. Как правило, полезнее использовать parse(CharSequence, TemporalQuery). Результатом этого метода является TemporalAccessor объект, который был разрешен, применяя базовые проверки валидности для обеспечения корректной даты и времени.
Если парсинг завершается без прочтения всей длины текста или возникает проблема во время парсинга или объединения, то выбрасывается исключение.
- Parameters:
-
text- текст для анализа, не null - Returns:
- анализ временного объекта, не null
- Throws:
-
DateTimeParseException- если невозможно проанализировать запрашиваемый результат
parse
public TemporalAccessor parse(CharSequence text, ParsePosition position)
Это анализирует текст без необходимости начать анализ с начала строки или закончить в конце. Результатом этого метода является TemporalAccessor объект, который был разрешен, применяя базовые проверки валидности для обеспечения корректной даты и времени.
Текст будет анализироваться с указанной начальной ParsePosition. Не вся длина текста должна быть обработана, ParsePosition будет обновлен с индексом в конце парсинга.
Работа этого метода немного отличается от аналогичных методов с использованием ParsePosition в java.text.Format. Этот класс будет возвращать ошибки, используя индекс ошибки в ParsePosition. В отличие от этого, этот метод будет выбрасывать DateTimeParseException, если произойдет ошибка, при этом исключение будет содержать индекс ошибки. Это изменение поведения необходимо из-за повышенной сложности анализа и разрешения дат/времени в этом API.
Если форматер анализирует одно и то же поле более одного раза с разными значениями, результатом будет ошибка.
- Parameters:
-
text- текст для анализа, не null -
position- позиция для анализа, обновляется с длиной, проанализированной и индексом любой ошибки, не null - Returns:
- анализ временного объекта, не null
- Throws:
-
DateTimeParseException- если невозможно проанализировать запрашиваемый результат -
IndexOutOfBoundsException- если позиция неверна
parse
public <T> T parse(CharSequence text, TemporalQuery<T> query)
Большинство приложений должны использовать этот метод для анализа. Он анализирует весь текст, чтобы создать требуемую дату-время. Запрос, как правило, является ссылкой на метод from(TemporalAccessor) метод. Например:
LocalDateTime dt = parser.parse(str, LocalDateTime::from);Если парсинг завершается без прочтения всей длины текста или возникает проблема во время парсинга или объединения, то выбрасывается исключение.
- Type Parameters:
-
T- тип проанализированной даты-времени - Parameters:
-
text- текст для анализа, не null -
query- запрос, определяющий тип для анализа, не null - Returns:
- проанализированная дата-время, не null
- Throws:
-
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 {
...
}
Если анализ завершается без чтения всего текста или возникает проблема во время анализа или слияния, то генерируется исключение.- Parameters:
-
text- текст для анализа, не null -
queries- запросы, определяющие типы для попытки анализа, должны реализовыватьTemporalAccessor, не null - Returns:
- проаналированная дата-время, не null
- Throws:
-
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) или метод анализа для целевого типа.
- Parameters:
-
text- текст для анализа, не null -
position- позиция для анализа, обновленная с длиной, проанализированной и индексом любой ошибки, не null - Returns:
- проанализированный текст, null, если анализ приводит к ошибке
- Throws:
-
DateTimeException- если возникает какая-либо проблема во время анализа -
IndexOutOfBoundsException- если позиция неверна
toFormat
public Format toFormat()
java.text.Format. Возвращаемый экземпляр Format будет форматировать любой TemporalAccessor и парсить в разрешенный TemporalAccessor.
Исключения будут соответствовать определениям Format, см. эти методы для получения подробной информации о IllegalArgumentException при форматировании и ParseException или null при анализе. Формат не поддерживает атрибутирование возвращаемой строки формата.
- Returns:
- этот форматер в виде экземпляра классического формата, не null
toFormat
public Format toFormat(TemporalQuery<?> parseQuery)
java.text.Format который будет анализировать с помощью указанного запроса. Возвращаемый экземпляр Format будет форматировать любой TemporalAccessor и анализировать до указанного типа. Тип должен быть тем, который поддерживается parse(java.lang.CharSequence).
Исключения будут соответствовать определениям Format, см. эти методы для получения подробной информации о IllegalArgumentException при форматировании и ParseException или null при анализе. Формат не поддерживает атрибутирование возвращаемой строки формата.
- Parameters:
-
parseQuery- запрос, определяющий тип, который нужно проанализировать, не null - Returns:
- этот форматер как экземпляр классического формата, не null
toString
public String toString()
- Overrides:
-
toStringв классеObject - Returns:
- описание этого форматера, не null
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/format/DateTimeFormatter.html