Spec-Zone.ru › OpenJDK 25

Класс 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);

Помимо формата, форматтеры можно создавать с заданными Locale, Chronology, ZoneId и DecimalStyle.

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

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

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

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

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

Предопределённые форматтеры

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

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

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

Например:

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

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

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

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

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

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

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

Дробь: Выводит поле наносекунд секунды как долю секунды. Значение наносекунд секунды состоит из девяти цифр, поэтому количество букв шаблона может быть от 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', с часом без ведущего нуля, необязательными двухзначными минутами и секундами, если они ненулевые, и двоеточием; например 'GMT+8'. Четыре буквы выводят полную форму — локализованный текст смещения, например 'GMT', с двухзначными полями часов и минут, необязательным полем секунд, если они ненулевые, и двоеточием; например 'GMT+08:00'. Если смещение равно нулю, выводится только локализованный текст. Любое другое количество букв вызывает IllegalArgumentException.

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

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

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

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

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

Сведение данных

Разбор выполняется в два этапа. Сначала текст разбирается с использованием структуры, заданной форматтером, и формируется Map «поле — значение», ZoneId и Chronology. Затем разобранные данные сводятся: поля проверяются, объединяются и упрощаются, чтобы получить более удобные значения.

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

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

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

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

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

  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)
Форматирует объект даты и времени с помощью этого форматировщика.
void formatTo(TemporalAccessor temporal, Appendable appendable)
Форматирует объект даты и времени в 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)
Возвращает копию этого форматировщика с новым переопределяющим часовым поясом.

Методы, объявленные в классе 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(CharSequence, 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_LOCAL_TIME
  • Если смещение недоступно, формат считается полным.
  • offset ID. Если смещение включает секунды, они также будут обработаны, хотя это не предусмотрено стандартом ISO-8601. При анализе регистр не учитывается.

Поскольку этот форматтер содержит необязательный элемент, может потребоваться выполнить анализ с помощью parseBest(CharSequence, 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(CharSequence, 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(CharSequence, 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(CharSequence, 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(CharSequence, 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.

Параметры:
pattern — используемый шаблон, не null
locale — используемая локаль, не null
Возвращает:
форматтер на основе шаблона, не null
Исключения:
IllegalArgumentException — если шаблон недопустим
См. также:
  • DateTimeFormatterBuilder.appendPattern(String)

ofLocalizedDate

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

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

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

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

Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения SMART.

Параметры:
dateStyle — требуемый стиль форматтера, не null
Возвращает:
форматтер дат, не null

ofLocalizedTime

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

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

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

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

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

Параметры:
timeStyle — требуемый стиль форматтера, не null
Возвращает:
форматтер времени, не null

ofLocalizedDateTime

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

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

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

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

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

Параметры:
dateTimeStyle — требуемый стиль форматтера, не null
Возвращает:
форматтер даты и времени, не null

ofLocalizedDateTime

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

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

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

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

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

Параметры:
dateStyle — требуемый стиль форматтера даты, не null
timeStyle — требуемый стиль форматтера времени, не null
Возвращает:
форматтер даты, времени или даты и времени, не null

ofLocalizedPattern

public static DateTimeFormatter ofLocalizedPattern(String requestedTemplate)
Создает форматтер с учетом локали, полученный из запрошенного шаблона для 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.

Параметры:
requestedTemplate — запрошенный шаблон, не null
Возвращает:
форматтер на основе шаблона requestedTemplate, не null
Исключения:
IllegalArgumentException — если requestedTemplate недопустим
С версии:
19
Внешние спецификации
  • Язык разметки данных локалей Unicode (LDML)
См. также:
  • 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());
Возвращает:
запрос, предоставляющий доступ к разобранному превышению в днях

parsedLeapSecond

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

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

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

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

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

getLocale

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

Она используется для поиска локализованных элементов форматтера, например текста или локализованного шаблона.

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

withLocale

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

Она используется для поиска локализованных элементов форматтера, например текста или локализованного шаблона.

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

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

Параметры:
locale — новая локаль, не null
Возвращает:
форматтер на основе этого форматтера с запрошенной локалью, не null
См. также:
  • localizedBy(Locale)

localizedBy

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

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

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

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

Параметры:
locale — локаль, не null
Возвращает:
форматтер на основе этого форматтера с локализованными значениями календаря, десятичного формата и/или часового пояса, которые имеют приоритет над значениями в этом форматтере.
С версии:
10
См. также:
  • withLocale(Locale)

getDecimalStyle

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

withDecimalStyle

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

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

Параметры:
decimalStyle — новый DecimalStyle, не null
Возвращает:
форматтер на основе этого форматтера с запрошенным DecimalStyle, не null

getChronology

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

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

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

withChronology

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

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

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

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

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

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

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

Параметры:
chrono — новая хронология; null, если переопределение отсутствует
Возвращает:
форматтер на основе этого форматтера с запрошенной переопределяющей хронологией, не null

getZone

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

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

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

withZone

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

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

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

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

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

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

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

Параметры:
zone — новый переопределяющий часовой пояс; null, если переопределение отсутствует
Возвращает:
форматтер на основе этого форматтера с запрошенным переопределяющим часовым поясом, не null

getResolverStyle

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

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

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

withResolverStyle

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

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

Изменение стиля разрешения влияет только на разбор. Разбор текстовой строки выполняется в два этапа. На этапе 1 выполняется базовый разбор текста согласно полям, добавленным в построитель. На этапе 2 разобранные пары «поле — значение» разрешаются в объекты даты и/или времени. Стиль разрешения определяет, как выполняется этап 2 — разрешение. Дополнительные сведения о доступных параметрах см. в разделе ResolverStyle.

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

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

getResolverFields

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

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

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

withResolverFields

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

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

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

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

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

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

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

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

withResolverFields

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

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

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

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

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

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

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

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

format

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

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

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

formatTo

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

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

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

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

parse

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

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

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

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

parse

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

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

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

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

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

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

parse

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

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

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

parseBest

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

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

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

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

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

toFormat

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

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

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

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

toFormat

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

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

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

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

toString

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, общие сведения, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

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

Spec-Zone.ru

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