Spec-Zone.ru › OpenJDK 21

Класс DateTimeFormatter

java.lang.Object
java.time.format.DateTimeFormatter
public final class DateTimeFormatter extends Object
Форматировщик для печати и разбора объектов даты и времени.

Этот класс предоставляет основную точку входа для печати и разбора и предоставляет общие реализации DateTimeFormatter:

  • Использование предопределённых констант, таких как ISO_LOCAL_DATE
  • Использование символов шаблона, таких как uuuu-MMM-dd
  • Использование локальных стилей, таких как long или medium

Более сложные форматировщики предоставляются классом DateTimeFormatterBuilder.

Основные классы даты и времени предоставляют два метода — один для форматирования, format(DateTimeFormatter formatter), и один для разбора, parse(CharSequence text, DateTimeFormatter formatter).

Например:

  LocalDate date = LocalDate.now();
  String text = date.format(formatter);
  LocalDate parsedDate = LocalDate.parse(text, formatter);
 

В дополнение к формату, форматировщики могут быть созданы с желаемой локалью, хронологией, часовым поясом и стилем десятичных знаков.

Метод withLocale возвращает новый форматировщик, который переопределяет локаль. Локаль влияет на некоторые аспекты форматирования и разбора. Например, ofLocalizedDate предоставляет форматировщик, использующий локальный формат даты.

Метод withChronology возвращает новый форматировщик, который переопределяет хронологию. При переопределении значение даты и времени преобразуется в хронологию перед форматированием. При разборе значение даты и времени преобразуется в хронологию перед возвращением.

Метод withZone возвращает новый форматировщик, который переопределяет часовой пояс. При переопределении значение даты и времени преобразуется в ZonedDateTime с запрошенным часовым поясом перед форматированием. При разборе часовой пояс применяется перед возвращением значения.

Метод withDecimalStyle возвращает новый форматировщик, который переопределяет DecimalStyle. Символы DecimalStyle используются для форматирования и разбора.

Некоторые приложения могут нуждаться в использовании более старого класса java.text.Format для форматирования. Метод toFormat() возвращает реализацию java.text.Format.

Предопределённые Форматировщики

Предопределённые Форматировщики
Форматировщик Описание Пример
ofLocalizedDate(dateStyle) Форматировщик со стилем даты из локали '2011-12-03'
ofLocalizedTime(timeStyle) Форматировщик со стилем времени из локали '10:15:30'
ofLocalizedDateTime(dateTimeStyle) Форматировщик со стилем даты и времени из локали '3 июн 2008 11:05:30'
ofLocalizedDateTime(dateStyle,timeStyle) Форматировщик со стилем даты и времени из локали '3 июн 2008 11:05'
BASIC_ISO_DATE Базовая ISO дата '20111203'
ISO_LOCAL_DATE ISO Локальная дата '2011-12-03'
ISO_OFFSET_DATE ISO Дата со смещением '2011-12-03+01:00'
ISO_DATE ISO Дата со смещением или без него '2011-12-03+01:00'; '2011-12-03'
ISO_LOCAL_TIME Время без смещения '10:15:30'
ISO_OFFSET_TIME Время со смещением '10:15:30+01:00'
ISO_TIME Время со смещением или без него '10:15:30+01:00'; '10:15:30'
ISO_LOCAL_DATE_TIME ISO Локальная дата и время '2011-12-03T10:15:30'
ISO_OFFSET_DATE_TIME Дата и время со смещением '2011-12-03T10:15:30+01:00'
ISO_ZONED_DATE_TIME Зонированное время '2011-12-03T10:15:30+01:00[Europe/Paris]'
ISO_DATE_TIME Дата и время с часовым поясом '2011-12-03T10:15:30+01:00[Europe/Paris]'
ISO_ORDINAL_DATE Год и день года '2012-337'
ISO_WEEK_DATE Год и неделя '2012-W48-6'
ISO_INSTANT Дата и время момента '2011-12-03T10:15:30Z'
RFC_1123_DATE_TIME RFC 1123 / RFC 822 'Вт, 3 июн 2008 11:05:30 GMT'

Шаблоны для форматирования и разбора

Шаблоны основаны на простом наборе букв и символов. Шаблон используется для создания форматировщика с помощью методов ofPattern(String) и ofPattern(String, Locale). Например, "d MMM uuuu" отформатирует 2011-12-03 как '3 дек 2011'. Форматировщик, созданный из шаблона, может быть использован столько раз, сколько необходимо, он неизменяем и потокобезопасен.

Например:

  LocalDate date = LocalDate.now();
  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd");
  String text = date.format(formatter);
  LocalDate parsedDate = LocalDate.parse(text, formatter);
 

Все буквы от 'A' до 'Z' и от 'a' до 'z' зарезервированы как символы шаблона. Определены следующие символы шаблона:

Символы шаблонов и их значение
Символ Значение Представление Примеры
G эра текст н. э.; Anno Domini; н. э.
u год число 2004; 04
y год от эры число 2004; 04
D день года число 189
M/L месяц года число/текст 7; 07; Июл; Июль; И
d день месяца число 10
g изменённый юлианский день число 2451334
Q/q четверть года число/текст 3; 03; Q3; 3-я четверть
Y неделя года число 1996; 96
w неделя в году число 27
W неделя месяца число 4
E день недели текст Вт; Вторник; В
e/c локальный день недели число/текст 2; 02; Вт; Вторник; В
F выравненная неделя месяца число 3
a время суток (AM/PM) текст PM
B период суток текст утром
h час в формате AM/PM (1-12) число 12
K час в формате AM/PM (0-11) число 0
k час в формате 24-часов (1-24) число 24
H час в формате 24-часов (0-23) число 0
m минута число 30
s секунда число 55
S дробная часть секунды дробное число 978
A миллисекунда число 1234
n наносекунда число 987654321
N наносекунда число 1234000000
V Идентификатор часового пояса идентификатор часового пояса America/Los_Angeles; Z; -08:30
v Наименование часового пояса имя часового пояса Тихоокеанское время; PT
z Наименование часового пояса имя часового пояса Тихоокеанское стандартное время; PST
O локальное смещение часового пояса смещение-O GMT+8; GMT+08:00; UTC-08:00
X смещение часового пояса 'Z' для нуля смещение-X Z; -08; -0830; -08:30; -083015; -08:30:15
x смещение часового пояса смещение-x +0000; -08; -0830; -08:30; -083015; -08:30:15
Z смещение часового пояса смещение-Z +0000; -0800; -08:00
p добавить следующее модификатор добавления 1
' экранирование текста разделитель
'' одинарная кавычка литерал '
[ начало необязательной секции
] конец необязательной секции
# зарезервировано для будущего использования
{ зарезервировано для будущего использования
} зарезервировано для будущего использования

Количество символов шаблона определяет формат.

Текст: Стиль текста определяется на основе количества используемых символов шаблона. Менее 4 символов шаблона будут использовать short form. Ровно 4 символа шаблона будут использовать full form. Ровно 5 символов шаблона будут использовать narrow form. Символы шаблона 'L', 'c' и 'q' указывают на автономную форму стилей текста.

END_OF_DOCUMENT_MARKER

Число: Если количество букв равно одному, значение выводится с минимальным количеством цифр без заполнения. В противном случае, количество цифр используется в качестве ширины поля вывода, а значение дополняется нулями по мере необходимости. Следующие символы шаблона имеют ограничения на количество букв. Можно указать только одну букву 'c' и 'F'. До двух букв 'd', 'H', 'h', 'K', 'k', 'm' и 's'. До трёх букв 'D'.

Число/Текст: Если количество символов шаблона равно 3 или больше, используются правила для текста, описанные выше. В противном случае используются правила для чисел, описанные выше.

Дробная часть: Выводит поле наносекунд как дробную часть секунды. Значение наносекунд имеет девять цифр, поэтому количество символов шаблона составляет от 1 до 9. Если оно меньше 9, значение наносекунд усекается, и выводятся только самые значимые цифры.

Год: Количество букв определяет минимальную ширину поля, ниже которой используется заполнение. Если количество букв равно двум, используется форма с двумя цифрами reduced. При выводе выводятся две последние цифры. При разборе используется базовое значение 2000, что приводит к году в диапазоне от 2000 до 2099 включительно. Если количество букв меньше четырёх (но не равно двум), знак выводится только для отрицательных годов, согласно SignStyle.NORMAL. В противном случае знак выводится, если ширина заполнения превышена, согласно SignStyle.EXCEEDS_PAD.

ZoneId: Выводит идентификатор часового пояса, например, 'Europe/Paris'. Если количество букв равно двум, выводится идентификатор часового пояса. Любое другое количество букв приводит к IllegalArgumentException.

Названия часовых поясов: Выводит отображаемое имя идентификатора часового пояса. Если символ шаблона равен 'z', выводится имя часового пояса, учитывающее переходы на летнее время. Если нет достаточной информации для определения применения DST, используется имя, игнорирующее летнее время. Если количество букв равно одному, двум или трём, выводится короткое имя. Если количество букв равно четырём, выводится полное имя. Пять или более букв приводят к IllegalArgumentException.

Если символ шаблона равен 'v', вывод содержит имя часового пояса, игнорирующее переходы на летнее время. Если количество букв равно одному, выводится короткое имя. Если количество букв равно четырём, выводится полное имя. Два, три и пять или более букв приводят к IllegalArgumentException.

Смещение X и x: Форматирует смещение на основе количества символов шаблона. Одна буква выводит только час, например '+01', если минута отлична от нуля, выводится также минута, например '+0130'. Две буквы выводит час и минуту без двоеточия, например '+0130'. Три буквы выводит час и минуту с двоеточием, например '+01:30'. Четыре буквы выводит час, минуту и (необязательные) секунды без двоеточия, например '+013015'. Пять букв выводит час, минуту и (необязательные) секунды с двоеточием, например '+01:30:15'. Шесть или более букв приводят к IllegalArgumentException. Символ шаблона 'X' (заглавная буква) выведет 'Z', если выводимое смещение равно нулю, а символ шаблона 'x' (строчная буква) выведет '+00', '+0000' или '+00:00'.

Смещение O: При ненулевом смещении это форматирует локальное смещение на основе количества символов шаблона. Одна буква выводит сокращённую форму локального смещения, например 'GMT', с часом без ведущего нуля, необязательными 2-значными минутами и секундами, если они не нулевые, и двоеточием, например 'GMT+8'. Четыре буквы выводит полную форму, например 'GMT', с 2-значным часом и минутой, необязательным полем секунды, если оно не нулевое, и двоеточием, например 'GMT+08:00'. Если смещение равно нулю, выводится только локальный текст. Любое другое количество букв приводит к IllegalArgumentException.

Смещение Z: Это форматирует смещение на основе количества символов шаблона. Одна, две или три буквы выводит час и минуту без двоеточия, например '+0130'. Вывод будет '+0000' при смещении ноль. Четыре буквы выводят полную форму локального смещения, эквивалентную четырём буквам смещения O. Вывод будет соответствующим локальным смещением, если смещение равно нулю. Пять букв выводят час, минуту, а необязательные секунды, если они не нулевые, с двоеточием. Выводит 'Z', если смещение равно нулю. Шесть или более букв приводят к IllegalArgumentException.

Необязательная секция: Маркеры необязательной секции работают точно так же, как вызов DateTimeFormatterBuilder.optionalStart() и DateTimeFormatterBuilder.optionalEnd().

Модификатор заполнения: Изменяет шаблон, который следует непосредственно за ним, для заполнения пробелами. Ширина заполнения определяется количеством символов шаблона. Это то же самое, что вызов DateTimeFormatterBuilder.padNext(int).

Например, 'ppH' выводит час суток, заполненный пробелами слева до ширины 2.

Любой нераспознанный символ — ошибка. Любой небуквенный символ, кроме '[', ']', '{', '}', '#', и одинарной кавычки, будет выведен напрямую. Несмотря на это, рекомендуется использовать одинарные кавычки вокруг всех символов, которые вы хотите вывести напрямую, чтобы гарантировать, что будущие изменения не повредят ваше приложение.

Разрешение

Разбор реализован как двухфазный процесс. Сначала текст анализируется с использованием структуры, определённой форматировщиком, создавая Map из поля в значение, ZoneId и Chronology. Во-вторых, проанализированные данные разрешаются путём проверки, объединения и упрощения различных полей в более полезные.

Этот класс предоставляет пять методов разбора. Четыре из них выполняют как фазы разбора, так и разрешения. Пятый метод, parseUnresolved(CharSequence, ParsePosition), выполняет только первую фазу, оставляя результат неразрешённым. Таким образом, это по существу операция низкого уровня.

Фаза разрешения контролируется двумя параметрами, заданными в этом классе.

ResolverStyle — перечисление, которое предлагает три различных подхода: строгий, интеллектуальный и снисходительный. Интеллектуальный вариант является по умолчанию. Его можно установить с помощью withResolverStyle(ResolverStyle).

Параметр withResolverFields(TemporalField...) позволяет отфильтровать набор полей, которые будут разрешены, прежде чем начнется разрешение. Например, если форматировщик проанализировал год, месяц, число и день года, то существует два способа разрешить дату: (год + месяц + число) и (год + день года). Параметр разрешающих полей позволяет выбрать один из двух подходов. Если поля разрешения не заданы, оба подхода должны привести к одной и той же дате.

Разрешение отдельных полей для формирования полной даты и времени — сложный процесс с поведением, распределённым по нескольким классам. Он выполняет следующие шаги:

  1. Определяется хронология. Хронология результата — либо хронология, которая была проанализирована, либо, если хронология не была проанализирована, это хронология, заданная в этом классе, или, если она равна null, это IsoChronology.
  2. Разрешаются поля даты ChronoField. Это достигается с помощью Chronology.resolveDate(Map, ResolverStyle). Документация по разрешению полей находится в реализации Chronology.
  3. Разрешаются поля времени ChronoField. Это документировано в ChronoField и одинаково для всех хронологий.
  4. Обрабатываются любые поля, которые не являются ChronoField. Это достигается с помощью TemporalField.resolve(Map, TemporalAccessor, ResolverStyle). Документация по разрешению полей находится в реализации TemporalField.
  5. Поля даты и времени ChronoField переразрешаются. Это позволяет полям на шаге четыре создавать ChronoField значения и обрабатывать их в даты и время.
  6. Формируется LocalTime , если доступен хотя бы час. Это включает предоставление значений по умолчанию для минуты, секунды и дробной части секунды.
  7. Любые оставшиеся неразрешённые поля проверяются на соответствие любой дате и/или времени, которое было разрешено. Таким образом, на предыдущем этапе разрешение (год + месяц + число) к дате, и на этом этапе проверяется, что день недели действителен для даты.
  8. Если был проанализирован лишний номер дней, он добавляется к дате, если дата доступна.
  9. Если присутствует поле, основанное на секундах, но LocalTime не было проанализировано, то решатель гарантирует, что значения милли, микро и наносекунд доступны, чтобы соответствовать контракту ChronoField. Они будут установлены в ноль, если отсутствуют.
  10. Если были проанализированы и дата, и время, и присутствует смещение или часовой пояс, создаётся поле 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(TemporalAccessor temporal)
Форматирует объект DateTime с помощью этого форматтера.
void formatTo(TemporalAccessor temporal, Appendable appendable)
Форматирует объект DateTime в Appendable с помощью этого форматтера.
Chronology getChronology()
Возвращает переопределенную хронологию, которая будет использоваться во время форматирования.
DecimalStyle getDecimalStyle()
Возвращает DecimalStyle, который будет использоваться во время форматирования.
Locale getLocale()
Возвращает локаль, которая будет использоваться во время форматирования.
Set<TemporalField> getResolverFields()
Возвращает поля разрешения, которые будут использоваться во время анализа.
ResolverStyle getResolverStyle()
Возвращает стиль разрешения, который будет использоваться во время анализа.
ZoneId getZone()
Возвращает переопределенный часовой пояс, который будет использоваться при форматировании.
DateTimeFormatter localizedBy(Locale locale)
Возвращает копию этого форматтера с локализованными значениями локали, календаря, региона, десятичного стиля и/или часового пояса, которые переопределяют значения в этом форматтере.
static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle)
Возвращает формат даты, специфичный для локали, для хронологии ISO.
static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateTimeStyle)
Возвращает формат дат и времени, специфичный для локали, для хронологии ISO.
static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateStyle, FormatStyle timeStyle)
Возвращает формат даты и времени, специфичный для локали, для хронологии ISO.
static DateTimeFormatter ofLocalizedPattern(String requestedTemplate)
Создаёт форматтер, специфичный для локали, на основе запрошенной шаблона для хронологии ISO.
static DateTimeFormatter ofLocalizedTime(FormatStyle timeStyle)
Возвращает формат времени, специфичный для локали, для хронологии ISO.
static DateTimeFormatter ofPattern(String pattern)
Создаёт форматтер, используя указанный шаблон.
static DateTimeFormatter ofPattern(String pattern, Locale locale)
Создаёт форматтер, используя указанный шаблон и локаль.
TemporalAccessor parse(CharSequence text)
Полностью анализирует текст, создавая временный объект.
TemporalAccessor parse(CharSequence text, ParsePosition position)
Анализирует текст, используя этот форматтер, предоставляя контроль над позицией текста.
<T> T parse(CharSequence text, TemporalQuery<T> query)
Полностью анализирует текст, создавая объект указанного типа.
TemporalAccessor parseBest(CharSequence text, TemporalQuery<?>... queries)
Полностью анализирует текст, создавая объект одного из указанных типов.
static final TemporalQuery<Period> parsedExcessDays()
Запрос, предоставляющий доступ к дополнительным дням, которые были проанализированы.
static final TemporalQuery<Boolean> parsedLeapSecond()
Запрос, предоставляющий доступ к тому, был ли проанализирован високосный секунда.
TemporalAccessor parseUnresolved(CharSequence text, ParsePosition position)
Анализирует текст, используя этот форматтер, без разрешения результата, предназначен для расширенных случаев использования.
Format toFormat()
Возвращает этот форматтер как экземпляр java.text.Format.
Format toFormat(TemporalQuery<?> parseQuery)
Возвращает этот форматтер как экземпляр java.text.Format экземпляр, который будет анализировать с использованием указанного запроса.
String toString()
Возвращает описание базовых форматтеров.
DateTimeFormatter withChronology(Chronology chrono)
Возвращает копию этого форматтера с новой переопределенной хронологией.
DateTimeFormatter withDecimalStyle(DecimalStyle decimalStyle)
Возвращает копию этого форматтера с новым DecimalStyle.
DateTimeFormatter withLocale(Locale locale)
Возвращает копию этого форматтера с новой локалью.
DateTimeFormatter withResolverFields(TemporalField... resolverFields)
Возвращает копию этого форматтера с новым набором полей разрешения.
DateTimeFormatter withResolverFields(Set<TemporalField> resolverFields)
Возвращает копию этого форматтера с новым набором полей разрешения.
DateTimeFormatter withResolverStyle(ResolverStyle resolverStyle)
Возвращает копию этого форматтера с новым стилем разрешения.
DateTimeFormatter withZone(ZoneId zone)
Возвращает копию этого форматтера с новым переопределённым часовым поясом.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание полей

ISO_LOCAL_DATE

public static final DateTimeFormatter ISO_LOCAL_DATE
Форматтер дат ISO, который форматирует или анализирует дату без смещения, например, '2011-12-03'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный локальный формат даты 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, который форматирует или анализирует дату со смещением, например, '2011-12-03+01:00'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты со смещением ISO-8601. Формат состоит из:

  • ISO_LOCAL_DATE
  • offset ID. Если смещение содержит секунды, они будут обработаны, даже если это не часть стандарта ISO-8601. Анализ нечувствителен к регистру.

Возвращаемый форматтер имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. Он не имеет наложенной зоны и использует стиль анализатора STRICT.

ISO_DATE

public static final DateTimeFormatter ISO_DATE
Форматтер дат ISO, который форматирует или анализирует дату со смещением, если оно доступно, например, '2011-12-03' или '2011-12-03+01:00'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты 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, который форматирует или анализирует время без смещения, например, '10:15' или '10:15:30'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный локальный формат времени 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, который форматирует или анализирует время со смещением, например, '10:15+01:00' или '10:15:30+01:00'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат времени со смещением ISO-8601. Формат состоит из:

  • ISO_LOCAL_TIME
  • offset ID. Если смещение содержит секунды, они будут обработаны, даже если это не часть стандарта ISO-8601. Анализ нечувствителен к регистру.

Возвращаемый форматтер не имеет наложенной хронологии или зоны. Он использует стиль анализатора STRICT.

ISO_TIME

public static final DateTimeFormatter ISO_TIME
Форматтер времени ISO, который форматирует или анализирует время со смещением, если оно доступно, например, '10:15', '10:15:30' или '10:15:30+01:00'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат локального или смещенного времени 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, который форматирует или анализирует дату-время без смещения, например, '2011-12-03T10:15:30'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный смещенный формат даты-времени ISO-8601. Формат состоит из:

  • ISO_LOCAL_DATE
  • Буква 'T'. Анализ нечувствителен к регистру.
  • ISO_LOCAL_TIME

Возвращаемый форматтер имеет хронологию ISO, чтобы обеспечить правильное преобразование дат в других календарных системах. Он не имеет наложенной зоны и использует стиль анализатора STRICT.

ISO_OFFSET_DATE_TIME

public static final DateTimeFormatter ISO_OFFSET_DATE_TIME
Форматтер даты-времени ISO, который форматирует или анализирует дату-время со смещением, например, '2011-12-03T10:15:30+01:00'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты-времени со смещением 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, который форматирует или анализирует дату-время со смещением и часовым поясом, например, '2011-12-03T10:15:30+01:00[Europe/Paris]'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать формат, расширяющий формат даты-времени со смещением 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, который форматирует или анализирует дату-время со смещением и часовым поясом, если они доступны, например, '2011-12-03T10:15:30', '2011-12-03T10:15:30+01:00' или '2011-12-03T10:15:30+01:00[Europe/Paris]'.

Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный локальный или смещенный формат даты-времени 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, который форматирует или анализирует порядковый номер даты без смещения, например, '2012-337'.

Возвращает неизменяемый форматировщик, способный форматировать и анализировать расширенный формат порядковой даты 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, который форматирует или анализирует дату на основе недели без смещения, например, '2012-W48-6'.

Возвращает неизменяемый форматировщик, способный форматировать и анализировать расширенный формат даты на основе недели 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, который форматирует или анализирует мгновение времени в UTC, например, '2011-12-03T10:15:30Z'.

Возвращает неизменяемый форматировщик, способный форматировать и анализировать формат мгновенного момента времени ISO-8601. При форматировании мгновение времени всегда будет суффикс 'Z', указывающий UTC. Секунды всегда выводятся. Миллисекунды выводятся нулём, тремя, шестью или девятью знаками по мере необходимости. При анализе используется поведение DateTimeFormatterBuilder.appendOffsetId() для анализа смещения, преобразуя мгновение времени в UTC при необходимости. Требуется время до по крайней мере секунд. Дробные секунды от нуля до девяти анализируются. Локализованный десятичный стиль не используется.

Это форматировщик специального случая, предназначенный для предоставления удобочитаемой формы Instant. Класс Instant предназначен только для представления момента во времени и внутренне хранит значение в наносекундах с фиксированной эпохой 1970-01-01Z. Таким образом, Instant не может быть отформатирован как дата или время без предоставления какой-либо временной зоны. Этот форматировщик позволяет отформатировать Instant путём предоставления соответствующего преобразования, используя ZoneOffset.UTC.

Формат состоит из:

  • Формат ISO_OFFSET_DATE_TIME, где мгновение времени преобразуется из ChronoField.INSTANT_SECONDS и ChronoField.NANO_OF_SECOND с использованием смещения UTC. Анализ регистронезависимый.

Возвращаемый форматировщик не имеет переопределённой хронологии или зоны. Используется стиль разрешения STRICT.

BASIC_ISO_DATE

public static final DateTimeFormatter BASIC_ISO_DATE
Форматировщик дат в формате ISO, который форматирует или анализирует дату без смещения, например, '20111203'.

Возвращает неизменяемый форматировщик, способный форматировать и анализировать базовый локальный формат даты 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, например, 'Tue, 3 Jun 2008 11:05:30 GMT'.

Возвращает неизменяемый форматировщик, способный форматировать и анализировать большую часть формата 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 - если шаблон недействителен
См. также:
  • DateTimeFormatterBuilder.appendPattern(String)

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:
  • DateTimeFormatterBuilder.appendPattern(String)

ofLocalizedDate

public static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle)
Возвращает локально-зависимый формат даты для хронологии ISO.

Возвращает форматер, который будет форматировать или анализировать дату. Точный шаблон формата зависит от локали.

Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, будет использовать default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) для результата этого метода.

Обратите внимание, что локальный шаблон ищется лениво. Этот метод DateTimeFormatter сохраняет необходимый стиль и локаль, ищущий шаблон по требованию.

Возвращаемый форматер имеет хронологию ISO, чтобы гарантировать правильное преобразование дат других календарных систем. У него нет переопределённой зоны и используется SMART стиль разрешения.

Parameters:
dateStyle - стиль форматера для получения, не null
Returns:
форматер даты, не null

ofLocalizedTime

public static DateTimeFormatter ofLocalizedTime(FormatStyle timeStyle)
Возвращает локально-зависимый формат времени для хронологии ISO.

Возвращает форматер, который будет форматировать или анализировать время. Точный шаблон формата зависит от локали.

Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, будет использовать 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)
Возвращает локально-зависимый форматер даты и времени для хронологии ISO.

Возвращает форматер, который будет форматировать или анализировать дату и время. Точный шаблон формата зависит от локали.

Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, будет использовать 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)
Возвращает локально-зависимый формат даты и времени для хронологии ISO.

Возвращает форматер, который будет форматировать или анализировать дату и время. Точный шаблон формата зависит от локали.

Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, будет использовать default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) для результата этого метода.

Обратите внимание, что локальный шаблон ищется лениво. Этот метод DateTimeFormatter сохраняет необходимый стиль и локаль, ищущий шаблон по требованию.

Возвращаемый форматер имеет хронологию ISO, чтобы гарантировать правильное преобразование дат других календарных систем. У него нет переопределённой зоны и используется SMART стиль разрешения. Стиль FULL и LONG обычно требуют временной зоны. При форматировании с использованием этих стилей должна быть доступна ZoneId зона, либо с помощью ZonedDateTime или withZone(java.time.ZoneId).

Parameters:
dateStyle - стиль форматера даты для получения, не null
timeStyle - стиль форматера времени для получения, не null
Returns:
форматер даты, времени или даты и времени, не null

ofLocalizedPattern

public static DateTimeFormatter ofLocalizedPattern(String requestedTemplate)
Создаёт локально-зависимый форматер, полученный из заданного шаблона для хронологии ISO. Заданный шаблон — это последовательность типичных символов шаблона в каноническом порядке от наибольшего к наименьшему временного или временного значения, что может быть выражено следующим регулярным выражением:
     "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
Все символы шаблона необязательны, и каждый символ шаблона представляет поле, например, 'M' представляет поле месяца. Количество букв символа шаблона следует той же форме представления, такой как «число» или «текст», как в разделе Шаблоны для форматирования и анализа. Другие символы шаблона в запрошенном шаблоне недопустимы.

Сопоставление запрошенного шаблона с ближайшими из доступных локальных форматов определяется спецификацией Unicode LDML. Например, форматер, созданный из шаблона yMMM , отформатирует дату '2020-06-16' в 'Jun 2020' в US locale.

Локаль определяется по форматеру. Форматер, возвращаемый напрямую этим методом, использует default FORMAT locale. Локаль можно контролировать, используя withLocale(Locale) для результата этого метода.

Возвращаемый форматер не имеет переопределённой зоны. Он использует SMART стиль разрешения.

Parameters:
requestedTemplate - запрошенный шаблон, не null
Returns:
форматер, основанный на requestedTemplate шаблоне, не null
Throws:
IllegalArgumentException - если requestedTemplate шаблон некорректен
Since:
19
External Specifications
  • Unicode Locale Data Markup Language (LDML)
See Also:
  • ofPattern(String)

parsedExcessDays

public static final TemporalQuery<Period> parsedExcessDays()
Запрос, предоставляющий доступ к избыточным дням, которые были проанализированы.

Возвращает одиночный запрос, обеспечивающий доступ к дополнительной информации из разбора. Запрос всегда возвращает не-null период, вместо null возвращает нулевой период.

Существуют две ситуации, в которых этот запрос может вернуть ненулевой период.

  • Если ResolverStyle режим LENIENT, и время анализируется без даты, то весь результат разбора состоит из LocalTime и избыточного Period в днях.
  • Если ResolverStyle режим SMART, и время анализируется без даты, где время равно 24:00:00, то весь результат разбора состоит из LocalTime 00:00:00 и избыточного Period в один день.

В обоих случаях, если весь ChronoLocalDateTime или Instant анализируется, то избыточные дни добавляются к части даты. В результате этот запрос вернёт нулевой период.

Поведение SMART обрабатывает распространённое значение «конец дня» 24:00. Обработка в режиме LENIENT также даёт такой же результат:

  Text to parse        Parsed object                         Excess days
  "2012-12-03T00:00"   LocalDateTime.of(2012, 12, 3, 0, 0)   ZERO
  "2012-12-03T24:00"   LocalDateTime.of(2012, 12, 4, 0, 0)   ZERO
  "00:00"              LocalTime.of(0, 0)                    ZERO
  "24:00"              LocalTime.of(0, 0)                    Period.ofDays(1)
 
Запрос может быть использован следующим образом:
  TemporalAccessor parsed = formatter.parse(str);
  LocalTime time = parsed.query(LocalTime::from);
  Period extraDays = parsed.query(DateTimeFormatter.parsedExcessDays());
 
Returns:
запрос, предоставляющий доступ к избыточным дням, которые были проанализированы

parsedLeapSecond

public static final TemporalQuery<Boolean> parsedLeapSecond()
Запрос, предоставляющий доступ к информации о том, была ли проанализирована високосная секунда.

Возвращает единственный экземпляр запроса, предоставляющего доступ к дополнительной информации из результата анализа. Запрос всегда возвращает непустое значение boolean, true, если при анализе была найдена високосная секунда, и false — если нет.

Анализ момента времени обрабатывает специальное время «високосной секунды» '23:59:60'. Високосные секунды происходят в '23:59:60' в часовом поясе UTC, но в другое местное время в других часовых поясах. Чтобы избежать этой потенциальной неоднозначности, обработка високосных секунд ограничена методом DateTimeFormatterBuilder.appendInstant(), так как этот метод всегда анализирует момент времени с часовым смещением UTC.

Если получено время '23:59:60', применяется простое преобразование, заменяющее секунду минуты 60 на 59. Этот запрос можно использовать с результатом анализа для определения, была ли выполнена корректировка на високосную секунду. Запрос вернёт true если была произведена корректировка для удаления високосной секунды и false — если нет. Обратите внимание, что применение механизма сглаживания високосных секунд, такого как UTC-SLS, является обязанностью приложения, как показано ниже:

  TemporalAccessor parsed = formatter.parse(str);
  Instant instant = parsed.query(Instant::from);
  if (parsed.query(DateTimeFormatter.parsedLeapSecond())) {
    // validate leap-second is correct and apply correct smoothing
  }
 
Returns:
запрос, предоставляющий доступ к информации о том, была ли проанализирована високосная секунда

getLocale

public Locale getLocale()
Получает локаль, используемую при форматировании.

Используется для поиска любой части форматировщика, требующей специфической локализации, такой как текст или локализованный шаблон.

Returns:
локаль этого форматировщика, не null

withLocale

public DateTimeFormatter withLocale(Locale locale)
Возвращает копию этого форматировщика с новой локалью.

Используется для поиска любой части форматировщика, требующей специфической локализации, такой как текст или локализованный шаблон.

Локаль хранится в переданном виде, без дальнейшей обработки. Если локаль содержит расширения Unicode, они могут быть использованы позже в обработке текста. Чтобы установить хронологию, часовой пояс и десятичный стиль из расширений Unicode, см. localizedBy().

Этот экземпляр неизменяем и не затрагивается этим вызовом метода.

Parameters:
locale - новая локаль, не null
Returns:
форматировщик, основанный на этом форматировщике с запрошенной локалью, не null
See Also:
  • localizedBy(Locale)

localizedBy

public DateTimeFormatter localizedBy(Locale locale)
Возвращает копию этого форматировщика с локализованными значениями локали, календаря, региона, десятичного стиля и/или часового пояса, которые переопределяют значения в этом форматировщике.

Используется для поиска любой части форматировщика, требующей специфической локализации, такой как текст или локализованный шаблон. Если локаль содержит расширения Unicode «ca» (календарь), «nu» (система нумерации), «rg» (переопределение региона) и/или «tz» (часовой пояс), хронология, система нумерации и/или зона переопределяются. Если указаны «ca» и «rg», хронология из расширения «ca» переопределяет неявную из расширения «rg». То же самое относится к расширению «nu».

В отличие от метода withLocale, вызов этого метода может привести к созданию другого форматировщика в зависимости от порядка цепочки вызовов с другими методами сXXXX().

Этот экземпляр неизменяем и не затрагивается этим вызовом метода.

Parameters:
locale - локаль, не null
Returns:
форматировщик, основанный на этом форматировщике с локализованными значениями календаря, десятичного стиля и/или часового пояса, которые переопределяют значения в этом форматировщике.
Since:
10
See Also:
  • withLocale(Locale)

getDecimalStyle

public DecimalStyle getDecimalStyle()
Получает DecimalStyle, используемый при форматировании.
Returns:
DecimalStyle этого форматировщика, не null

withDecimalStyle

public DateTimeFormatter withDecimalStyle(DecimalStyle decimalStyle)
Возвращает копию этого форматировщика с новым DecimalStyle.

Этот экземпляр неизменяем и не затрагивается этим вызовом метода.

Parameters:
decimalStyle - новый DecimalStyle, не null
Returns:
форматировщик, основанный на этом форматировщике с запрошенным DecimalStyle, не null

getChronology

public Chronology getChronology()
Получает переопределяющую хронологию, используемую при форматировании.

Возвращает переопределённую хронологию, используемую для преобразования дат. По умолчанию форматировщик не имеет переопределяющей хронологии, возвращая null. См. withChronology(Chronology) для получения более подробной информации о переопределении.

Returns:
переопределяющую хронологию этого форматировщика, null если нет переопределения

withChronology

public DateTimeFormatter withChronology(Chronology chrono)
Возвращает копию этого форматировщика с новой переопределяющей хронологией.

Возвращает форматировщик с аналогичным состоянием, что и этот форматировщик, но с установленной переопределяющей хронологией. По умолчанию форматировщик не имеет переопределяющей хронологии, возвращая null.

Если переопределение добавлено, то любая дата, которая форматируется или анализируется, будет затронута.

При форматировании, если временной объект содержит дату, она будет преобразована в дату в переопределённой хронологии. Определяется ли временной объект как дата, запрашивая поле EPOCH_DAY. Любое время или зона будут сохранены неизменными, если не переопределены.

Если временной объект не содержит дату, но содержит одно или несколько ChronoField полей даты, то выбрасывается DateTimeException. Во всех остальных случаях переопределяющая хронология добавляется к временному объекту, заменяя предыдущую хронологию, но не изменяя дату/время.

При анализе необходимо рассмотреть два разных случая. Если хронология была проанализирована непосредственно из текста, возможно, потому что был использован DateTimeFormatterBuilder.appendChronologyId(), то это переопределяющая хронология не оказывает никакого влияния. Если зона не была проанализирована, то эта переопределяющая хронология будет использоваться для интерпретации значений ChronoField в дату в соответствии с правилами разрешения даты хронологии.

Этот экземпляр неизменяем и не затрагивается этим вызовом метода.

Parameters:
chrono - новая хронология, null если нет переопределения
Returns:
форматировщик, основанный на этом форматировщике с запрошенной переопределяющей хронологией, не null

getZone

public ZoneId getZone()
Получает переопределяющую зону, используемую при форматировании.

Возвращает переопределённую зону, используемую для преобразования моментов времени. По умолчанию форматировщик не имеет переопределённой зоны, возвращая null. См. withZone(ZoneId) для получения более подробной информации о переопределении.

Returns:
переопределяющую зону этого форматировщика, null если нет переопределения

withZone

public DateTimeFormatter withZone(ZoneId zone)
Возвращает копию этого форматировщика с новой переопределяющей зоной.

Возвращает форматировщик с аналогичным состоянием, что и этот форматировщик, но с установленной переопределяющей зоной. По умолчанию форматировщик не имеет переопределённой зоны, возвращая null.

Если переопределение добавлено, то любой момент времени, который форматируется или анализируется, будет затронут.

При форматировании, если временной объект содержит момент времени, он преобразуется в дату-время с часовым поясом, используя переопределённую зону. Определяется ли временной объект как момент времени, запрашивая поле INSTANT_SECONDS. Если входной объект имеет хронологию, она сохраняется, если не переопределена. Если входной объект не имеет хронологии, такой как Instant, используется хронология ISO.

Если временной объект не содержит момент времени, но содержит смещение, выполняется дополнительная проверка. Если нормализованная переопределённая зона — это смещение, отличное от смещения временного объекта, то выбрасывается DateTimeException . Во всех остальных случаях переопределённая зона добавляется к временному объекту, заменяя предыдущую зону, но не изменяя дату/время.

При анализе необходимо рассмотреть два разных случая. Если зона была проанализирована непосредственно из текста, возможно, потому что был использован DateTimeFormatterBuilder.appendZoneId(), то это переопределяющая зона не оказывает никакого влияния. Если зона не была проанализирована, то эта переопределяющая зона будет включена в результат анализа, где она может использоваться для построения моментов времени и дат-времени.

Этот экземпляр неизменяем и не затрагивается этим вызовом метода.

Parameters:
zone - новая переопределяющая зона, null если нет переопределения
Returns:
форматировщик, основанный на этом форматировщике с запрошенной переопределяющей зоной, не null

getResolverStyle

public ResolverStyle getResolverStyle()
Получает стиль разрешения, используемый при анализе.

Возвращает стиль разрешения, используемый на втором этапе анализа, когда поля разрешаются в даты и времена. По умолчанию форматировщик имеет стиль разрешения SMART. См. withResolverStyle(ResolverStyle) для получения более подробной информации.

Returns:
стиль разрешения этого форматировщика, не null

стилизованныйРазрешитель

public DateTimeFormatter withResolverStyle(ResolverStyle resolverStyle)
Возвращает копию этого форматера с новым стилем разрешителя.

Это возвращает форматер с похожим состоянием, как у этого форматера, но со стилем разрешителя, установленным. По умолчанию форматер имеет стиль разрешителя SMART.

Изменение стиля разрешителя влияет только во время разбора. Разбор текстовой строки происходит в две фазы. Фаза 1 — это базовый разбор текста в соответствии с полями, добавленными в билдер. Фаза 2 разрешает пары поле-значение, полученные в результате разбора, в объекты даты и/или времени. Стиль разрешителя используется для управления тем, как происходит фаза 2, разрешение. Подробнее об доступных вариантах см. ResolverStyle

Этот экземпляр неизменяем и не затрагивается этим вызовом метода.

Параметры:
resolverStyle - новый стиль разрешителя, не null
Возвращает:
форматер, основанный на этом форматере, с запрошенным стилем разрешителя, не null

getResolverFields

public Set<TemporalField> getResolverFields()
Получает поля разрешителя, используемые во время разбора.

Это возвращает поля разрешителя, используемые во второй фазе разбора, когда поля разрешаются в даты и время. По умолчанию форматер не имеет полей разрешителя и, следовательно, возвращает null. Подробнее см. withResolverFields(Set).

Возвращает:
неизменяемый набор полей разрешителя этого форматера, null, если полей нет

withResolverFields

public DateTimeFormatter withResolverFields(TemporalField... resolverFields)
Возвращает копию этого форматера с новым набором полей разрешителя.

Это возвращает форматер с похожим состоянием, как у этого форматера, но с установленными полями разрешителя. По умолчанию у форматера нет полей разрешителя.

Изменение полей разрешителя влияет только во время разбора. Разбор текстовой строки происходит в две фазы. Фаза 1 — это базовый разбор текста в соответствии с полями, добавленными в билдер. Фаза 2 разрешает пары поле-значение, полученные в результате разбора, в объекты даты и/или времени. Поля разрешителя используются для фильтрации пар поле-значение между фазой 1 и 2.

Это можно использовать для выбора между двумя или более способами разрешения даты или времени. Например, если форматер состоит из года, месяца, дня месяца и дня года, то есть два способа разрешения даты. Вызов этого метода с аргументами YEAR и DAY_OF_YEAR гарантирует, что дата будет разрешаться с помощью года и дня года, фактически означая, что месяц и день месяца игнорируются во время фазы разрешения.

Аналогичным образом, этот метод можно использовать для игнорирования вторичных полей, которые в противном случае проверялись бы на соответствие. Например, если форматер состоит из года, месяца, дня месяца и дня недели, то есть только один способ разрешения даты, но значение, полученное в результате разбора для дня недели, будет проверяться на соответствие с разрешенной датой. Вызов этого метода с аргументами YEAR, MONTH_OF_YEAR и DAY_OF_MONTH гарантирует, что дата будет разрешена правильно, но без проверки на соответствие дня недели.

С точки зрения реализации, этот метод работает следующим образом. Результат фазы разбора можно рассматривать как карту поле-значение. Действие этого метода заключается в том, чтобы вызвать фильтрацию этой карты между фазами 1 и 2, удаляя все поля, кроме тех, которые указаны в качестве аргументов этого метода.

Этот экземпляр неизменяем и не затрагивается этим вызовом метода.

Параметры:
resolverFields - новый набор полей разрешителя, null, если полей нет
Возвращает:
форматер, основанный на этом форматере, с запрошенным стилем разрешителя, не null

withResolverFields

public DateTimeFormatter withResolverFields(Set<TemporalField> resolverFields)
Возвращает копию этого форматера с новым набором полей разрешителя.

Это возвращает форматер с похожим состоянием, как у этого форматера, но с установленными полями разрешителя. По умолчанию у форматера нет полей разрешителя.

Изменение полей разрешителя влияет только во время разбора. Разбор текстовой строки происходит в две фазы. Фаза 1 — это базовый разбор текста в соответствии с полями, добавленными в билдер. Фаза 2 разрешает пары поле-значение, полученные в результате разбора, в объекты даты и/или времени. Поля разрешителя используются для фильтрации пар поле-значение между фазой 1 и 2.

Это можно использовать для выбора между двумя или более способами разрешения даты или времени. Например, если форматер состоит из года, месяца, дня месяца и дня года, то есть два способа разрешения даты. Вызов этого метода с аргументами YEAR и DAY_OF_YEAR гарантирует, что дата будет разрешаться с помощью года и дня года, фактически означая, что месяц и день месяца игнорируются во время фазы разрешения.

Аналогичным образом, этот метод можно использовать для игнорирования вторичных полей, которые в противном случае проверялись бы на соответствие. Например, если форматер состоит из года, месяца, дня месяца и дня недели, то есть только один способ разрешения даты, но значение, полученное в результате разбора для дня недели, будет проверяться на соответствие с разрешенной датой. Вызов этого метода с аргументами YEAR, MONTH_OF_YEAR и DAY_OF_MONTH гарантирует, что дата будет разрешена правильно, но без проверки на соответствие дня недели.

С точки зрения реализации, этот метод работает следующим образом. Результат фазы разбора можно рассматривать как карту поле-значение. Действие этого метода заключается в том, чтобы вызвать фильтрацию этой карты между фазами 1 и 2, удаляя все поля, кроме тех, которые указаны в качестве аргументов этого метода.

Этот экземпляр неизменяем и не затрагивается этим вызовом метода.

Параметры:
resolverFields - новый набор полей разрешителя, null, если полей нет
Возвращает:
форматер, основанный на этом форматере, с запрошенным стилем разрешителя, не null

форматировать

public String format(TemporalAccessor temporal)
Форматирует объект даты-времени с помощью этого форматера.

Это форматирует дату-время в строку по правилам форматера.

Параметры:
temporal - объект временной шкалы для форматирования, не null
Возвращает:
отформатированная строка, не null
Исключение:
DateTimeException - если при форматировании произошла ошибка

formatTo

public void formatTo(TemporalAccessor temporal, Appendable appendable)
Форматирует объект даты-времени в Appendable с помощью этого форматера.

Это выводит отформатированную дату-время в указанное место назначения. Appendable — это интерфейс общего назначения, реализованный всеми ключевыми классами вывода символов, включая StringBuffer, StringBuilder, PrintStream и Writer.

Хотя методы Appendable выбрасывают IOException, этот метод этого не делает. Вместо этого любое IOException оборачивается в исключение времени выполнения.

Параметры:
temporal - объект временной шкалы для форматирования, не null
appendable - объект для добавления, не null
Исключение:
DateTimeException - если при форматировании произошла ошибка

разбор

public TemporalAccessor parse(CharSequence text)
Полностью анализирует текст, создавая объект временной шкалы.

Этот метод анализирует весь текст, создавая объект временной шкалы. Обычно более полезно использовать parse(CharSequence, TemporalQuery). Результат этого метода — TemporalAccessor, который был разрешен, применяя базовые проверки для обеспечения корректности даты и времени.

Если разбор завершается без чтения всего текста, или при разборе или объединении возникла проблема, то генерируется исключение.

Параметры:
text - текст для анализа, не null
Возвращает:
объект временной шкалы, полученный в результате анализа, не null
Исключение:
DateTimeParseException - если не удалось выполнить анализ запрошенного результата

разбор

public TemporalAccessor parse(CharSequence text, ParsePosition position)
Анализирует текст с помощью этого форматера, предоставляя контроль над позицией в тексте.

Этот метод анализирует текст, не требуя начала анализа с начала строки или завершения в конце. Результат этого метода — TemporalAccessor, который был разрешен, применяя базовые проверки для обеспечения корректности даты и времени.

Текст будет анализироваться с указанной начальной ParsePosition. Не обязательно анализировать всю длину текста, ParsePosition будет обновлено с индексом в конце анализа.

Работа этого метода немного отличается от аналогичных методов, использующих ParsePosition в java.text.Format. Этот класс возвращает ошибки, используя индекс ошибки в ParsePosition. В отличие от этого, этот метод сгенерирует исключение DateTimeParseException, если произойдет ошибка, и исключение будет содержать индекс ошибки. Это изменение поведения необходимо из-за повышенной сложности анализа и разрешения дат/времени в этом API.

Если форматер анализирует одно и то же поле более одного раза с разными значениями, результатом будет ошибка.

Параметры:
text - текст для анализа, не null
position - позиция для анализа, обновляется с длиной проанализированного текста и индексом любой ошибки, не null
Возвращает:
объект временной шкалы, полученный в результате анализа, не null
Исключение:
DateTimeParseException - если не удалось выполнить анализ запрошенного результата
IndexOutOfBoundsException - если позиция недопустима

parse

public <T> T parse(CharSequence text, TemporalQuery<T> query)
Полностью анализирует текст, создавая объект указанного типа.

Большинство приложений должны использовать этот метод для анализа. Он анализирует весь текст, чтобы создать требуемую дату и время. Запрос обычно является ссылкой на метод from(TemporalAccessor) метода. Например:

  LocalDateTime dt = parser.parse(str, LocalDateTime::from);
 
Если анализ завершается без чтения всего текста или возникает проблема во время анализа или слияния, выбрасывается исключение.
Параметры типа:
T - тип анализируемой даты и времени
Параметры:
text - текст для анализа, не null
query - запрос, определяющий тип для анализа, не null
Возвращает:
анализируемая дата и время, не null
Исключения:
DateTimeParseException - если невозможно проанализировать требуемый результат

parseBest

public TemporalAccessor parseBest(CharSequence text, TemporalQuery<?>... queries)
Полностью анализирует текст, создавая объект одного из указанных типов.

Этот метод анализа удобен для использования, когда анализатор может обрабатывать необязательные элементы. Например, шаблон 'uuuu-MM-dd HH.mm[ VV]' может быть полностью проанализирован до ZonedDateTime, или частично проанализирован до LocalDateTime. Запросы должны быть указаны в порядке, начиная с лучшего варианта полного анализа и заканчивая худшим вариантом минимального анализа. Запрос обычно является ссылкой на метод from(TemporalAccessor) метода.

Результат ассоциируется с первым типом, который успешно анализируется. Обычно приложения будут использовать instanceof для проверки результата. Например:

  TemporalAccessor dt = parser.parseBest(str, ZonedDateTime::from, LocalDateTime::from);
  if (dt instanceof ZonedDateTime) {
   ...
  } else {
   ...
  }
 
Если анализ завершается без чтения всего текста или возникает проблема во время анализа или слияния, выбрасывается исключение.
Параметры:
text - текст для анализа, не null
queries - запросы, определяющие типы для попытки анализа, должны реализовывать TemporalAccessor, не null
Возвращает:
анализируемая дата и время, не null
Исключения:
IllegalArgumentException - если указано менее 2 типов
DateTimeParseException - если невозможно проанализировать требуемый результат

parseUnresolved

public TemporalAccessor parseUnresolved(CharSequence text, ParsePosition position)
Анализирует текст с помощью этого форматировщика, не разрешая результат, предназначен для продвинутых случаев использования.

Анализ реализован как двухэтапная операция. Во-первых, текст анализируется с использованием макета, определенного форматировщиком, создавая Map поля к значению, ZoneId и Chronology. Во-вторых, проанализированные данные разрешаются, путем проверки, объединения и упрощения различных полей в более полезные. Этот метод выполняет этап анализа, но не этап разрешения.

Результат этого метода TemporalAccessor представляет данные так, как они видны на входе. Значения не проверяются, поэтому при анализе строковой даты '2012-00-65' будет получена временная метка с тремя полями: год '2012', месяц '0' и день '65'.

Текст будет анализироваться с указанного начального ParsePosition. Не нужно анализировать всю длину текста, ParsePosition будет обновлён с индексом в конце анализа.

Ошибки возвращаются с помощью поля индекса ошибки ParsePosition вместо parse(CharSequence, TemporalQuery). Возвращаемый индекс ошибки будет установлен на индекс, указывающий на ошибку. Вызывающие стороны должны проверять наличие ошибок перед использованием результата.

Если форматировщик анализирует одно и то же поле более одного раза с разными значениями, будет ошибка.

Этот метод предназначен для продвинутых случаев использования, требующих доступа к внутреннему состоянию во время анализа. Типичный код приложения должен использовать parse(CharSequence, TemporalQuery) или метод анализа целевого типа.

Параметры:
text - текст для анализа, не null
position - позиция для анализа, обновляется с длиной проанализированного и индексом любой ошибки, не null
Возвращает:
проанализированный текст, null, если анализ приводит к ошибке
Исключения:
DateTimeException - если возникает проблема во время анализа
IndexOutOfBoundsException - если позиция недействительна

toFormat

public Format toFormat()
Возвращает этот форматировщик как экземпляр java.text.Format.

Возвращаемый экземпляр Format будет форматировать любой TemporalAccessor и анализировать до разрешенного TemporalAccessor.

Исключения будут следовать определениям Format, см. эти методы для получения подробной информации о IllegalArgumentException во время форматирования и ParseException или null во время анализа. Формат не поддерживает присвоение возвращаемой строке форматирования.

Возвращает:
этот форматировщик как экземпляр классического форматирования, не null

toFormat

public Format toFormat(TemporalQuery<?> parseQuery)
Возвращает этот форматировщик как экземпляр java.text.Format , который будет анализировать с помощью указанного запроса.

Возвращаемый экземпляр Format будет форматировать любой TemporalAccessor и анализировать до указанного типа. Тип должен быть одним из поддерживаемых parse(java.lang.CharSequence).

Исключения будут следовать определениям Format, см. эти методы для получения подробной информации о IllegalArgumentException во время форматирования и ParseException или null во время анализа. Формат не поддерживает присвоение возвращаемой строке форматирования.

Параметры:
parseQuery - запрос, определяющий тип для анализа, не null
Возвращает:
этот форматировщик как экземпляр классического форматирования, не null

toString

public String toString()
Возвращает описание базовых форматировщиков.
Overrides:
toString в классе Object
Возвращает:
описание этого форматировщика, не null

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/time/format/DateTimeFormatter.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API