Spec-Zone.ru › OpenJDK 17

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Разрешение

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

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

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

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

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

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

  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).
Требования к реализации:
Этот класс неизменяемый и потокобезопасный.
С:
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 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 будут дополнены нулями до четырёх цифр. Годы за пределами этого диапазона будут иметь префиксный положительный или отрицательный знак.
  • Дефис
  • Две цифры для month-of-year. Они дополняются нулём до двух цифр.
  • Дефис
  • Две цифры для 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.
  • Если идентификатор часового пояса недоступен или является 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 будут дополнены нулями слева, чтобы гарантировать четыре цифры. Годы за пределами этого диапазона будут иметь префиксный знак плюс или минус.
  • Дефис
  • Три цифры для 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 будут дополнены нулями слева, чтобы гарантировать четыре цифры. Годы за пределами этого диапазона будут иметь префиксный знак плюс или минус.
  • Дефис
  • Буква 'W'. Анализ регистронезависимый.
  • Две цифры для week-of-week-based-year. Дополняется нулями слева, чтобы гарантировать две цифры.
  • Дефис
  • Одна цифра для day-of-week. Значения от понедельника (1) до воскресенья (7).
  • Если смещение недоступно для форматирования или анализа, то формат завершается.
  • Идентификатор offset ID. Если смещение содержит секунды, они будут обработаны, хотя это не часть стандарта ISO-8601. Анализ регистронезависимый.

Поскольку у этого форматировщика есть необязательный элемент, может потребоваться анализ с использованием parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...).

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

ISO_INSTANT

public static final DateTimeFormatter ISO_INSTANT
Форматировщик момента ISO, который форматирует или анализирует момент в UTC, например, '2011-12-03T10:15:30Z'.

Возвращает неизменяемый форматировщик, способный форматировать и анализировать формат момента ISO-8601. При форматировании момент всегда добавляется суффикс 'Z' для обозначения UTC. Вторая часть минуты всегда выводится. Наносекунды вывода — 0, 3, 6 или 9 цифр по мере необходимости. При анализе поведение DateTimeFormatterBuilder.appendOffsetId() будет использовано для анализа смещения, преобразуя момент в UTC при необходимости. Время до поля секунд обязательно. Дробные секунды от 0 до 9 анализируются. Локализованный десятичный стиль не используется.

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

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

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

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

BASIC_ISO_DATE

public static final DateTimeFormatter BASIC_ISO_DATE
Форматировщик даты ISO, который форматирует или анализирует дату без смещения, например, '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

parsedExcessDays

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

Это возвращает одиночный запрос, который обеспечивает доступ к дополнительной информации из анализа. Запрос всегда возвращает ненулевой период, вместо 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

сLocale

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

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

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

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

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

localizedBy

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

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

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

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

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

getDecimalStyle

public DecimalStyle getDecimalStyle()
Получает DecimalStyle, используемый при форматировании.
Returns:
языковой стандарт этого форматера, не 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

withResolverStyle

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

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

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

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

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

getResolverFields

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

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

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

withResolverFields

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

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

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

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

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

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

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

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

withResolverFields

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

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

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

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

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

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

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

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

format

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

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

Parameters:
temporal - объект временной метки для форматирования, не null
Returns:
отформатированная строка, не null
Throws:
DateTimeException - если во время форматирования произошла ошибка

formatTo

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

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

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

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

parse

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

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

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

Parameters:
text - текст для анализа, не null
Returns:
анализ временного объекта, не null
Throws:
DateTimeParseException - если невозможно проанализировать запрашиваемый результат

parse

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

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

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

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

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

Parameters:
text - текст для анализа, не null
position - позиция для анализа, обновляется с длиной, проанализированной и индексом любой ошибки, не null
Returns:
анализ временного объекта, не null
Throws:
DateTimeParseException - если невозможно проанализировать запрашиваемый результат
IndexOutOfBoundsException - если позиция неверна

parse

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

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

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

parseBest

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

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

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

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

parseUnresolved

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

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

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

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

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

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

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

Parameters:
text - текст для анализа, не null
position - позиция для анализа, обновленная с длиной, проанализированной и индексом любой ошибки, не null
Returns:
проанализированный текст, null, если анализ приводит к ошибке
Throws:
DateTimeException - если возникает какая-либо проблема во время анализа
IndexOutOfBoundsException - если позиция неверна

toFormat

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

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

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

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

toFormat

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

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

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

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

toString

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

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

Spec-Zone.ru

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