Класс 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...) позволяет отфильтровать набор полей, которые будут сведены, до начала сведения. Например, если форматтер разобрал год, месяц, день месяца и день года, есть два способа получить дату: (год + месяц + день месяца) и (год + день года). Поля сведения позволяют выбрать один из этих способов. Если поля сведения не заданы, оба способа должны дать одну и ту же дату.
Сведение отдельных полей для формирования полной даты и времени — сложный процесс, поведение которого распределено между несколькими классами. Процесс состоит из следующих шагов:
- Определяется хронология. Хронологией результата становится либо разобранная хронология, либо, если хронология не была разобрана, хронология, заданная для этого класса, либо, если она равна null,
IsoChronology. - Сводятся поля даты
ChronoField. Это выполняется с помощьюChronology.resolveDate(Map, ResolverStyle). Документация по сведению полей содержится в реализацииChronology. - Сводятся поля времени
ChronoField. Это описано в документации кChronoFieldи одинаково для всех хронологий. - Обрабатываются все поля, которые не являются
ChronoField. Это выполняется с помощьюTemporalField.resolve(Map, TemporalAccessor, ResolverStyle). Документация по сведению полей содержится в реализацииTemporalField. - Поля даты и времени
ChronoFieldсводятся повторно. Это позволяет полям, полученным на четвёртом шаге, создать значенияChronoFieldи обработать их как даты и время. - Формируется
LocalTime, если доступен как минимум час суток. Для этого задаются значения по умолчанию для минут, секунд и доли секунды. - Все оставшиеся несведённые поля проверяются на соответствие сведённым дате и/или времени. Например, на более раннем этапе из полей (год + месяц + день месяца) была получена дата, а на этом этапе проверяется, соответствует ли ей день недели.
- Если было разобрано избыточное количество дней, оно добавляется к дате, если дата доступна.
- Если присутствует поле секунд, но
LocalTimeне было разобрано, средство сведения обеспечивает наличие значений миллисекунд, микросекунд и наносекунд, чтобы выполнить требованияChronoField. Для отсутствующих значений устанавливается ноль. - Если были разобраны и дата, и время, а также присутствует смещение или часовой пояс, создаётся поле
ChronoField.INSTANT_SECONDS. Если было разобрано смещение, оно объединяется сLocalDateTimeдля формирования момента времени, а часовой пояс игнорируется. ЕслиZoneIdбыл разобран без смещения, часовой пояс объединяется сLocalDateTimeдля формирования момента времени с использованием правилChronoLocalDateTime.atZone(ZoneId). ЕслиZoneIdбыл разобран из названия часового пояса, указывающего, действует ли летнее время, эта информация используется для выбора правильного смещения при наложении временной шкалы местного времени.
- Требования к реализации:
- Этот класс неизменяем и потокобезопасен.
- Начиная с:
- 1.8
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final DateTimeFormatter |
BASIC_ISO_DATE |
Форматировщик дат ISO, который форматирует или разбирает дату без смещения, например '20111203'. |
static final DateTimeFormatter |
ISO_DATE |
Форматировщик дат ISO, который форматирует или разбирает дату со смещением, если оно указано, например '2011-12-03' или '2011-12-03+01:00'. |
static final DateTimeFormatter |
ISO_DATE_TIME |
Форматировщик даты и времени, подобный ISO, который форматирует или разбирает дату и время со смещением и часовым поясом, если они указаны, например '2011-12-03T10:15:30', '2011-12-03T10:15:30+01:00' или '2011-12-03T10:15:30+01:00[Europe/Paris]'. |
static final DateTimeFormatter |
ISO_INSTANT |
Форматировщик моментов времени ISO, который форматирует или разбирает момент времени в UTC, например '2011-12-03T10:15:30Z'. |
static final DateTimeFormatter |
ISO_LOCAL_DATE |
Форматировщик дат ISO, который форматирует или разбирает дату без смещения, например '2011-12-03'. |
static final DateTimeFormatter |
ISO_LOCAL_DATE_TIME |
Форматировщик даты и времени ISO, который форматирует или разбирает дату и время без смещения, например '2011-12-03T10:15:30'. |
static final DateTimeFormatter |
ISO_LOCAL_TIME |
Форматировщик времени ISO, который форматирует или разбирает время без смещения, например '10:15' или '10:15:30'. |
static final DateTimeFormatter |
ISO_OFFSET_DATE |
Форматировщик дат ISO, который форматирует или разбирает дату со смещением, например '2011-12-03+01:00'. |
static final DateTimeFormatter |
ISO_OFFSET_DATE_TIME |
Форматировщик даты и времени ISO, который форматирует или разбирает дату и время со смещением, например '2011-12-03T10:15:30+01:00'. |
static final DateTimeFormatter |
ISO_OFFSET_TIME |
Форматировщик времени ISO, который форматирует или разбирает время со смещением, например '10:15+01:00' или '10:15:30+01:00'. |
static final DateTimeFormatter |
ISO_ORDINAL_DATE |
Форматировщик дат ISO, который форматирует или разбирает порядковую дату без смещения, например '2012-337'. |
static final DateTimeFormatter |
ISO_TIME |
Форматировщик времени ISO, который форматирует или разбирает время со смещением, если оно указано, например '10:15', '10:15:30' или '10:15:30+01:00'. |
static final DateTimeFormatter |
ISO_WEEK_DATE |
Форматировщик дат ISO, который форматирует или разбирает дату в формате недели без смещения, например '2012-W48-6'. |
static final DateTimeFormatter |
ISO_ZONED_DATE_TIME |
Форматировщик даты и времени, подобный ISO, который форматирует или разбирает дату и время со смещением и часовым поясом, например '2011-12-03T10:15:30+01:00[Europe/Paris]'. |
static final DateTimeFormatter |
RFC_1123_DATE_TIME |
Форматировщик даты и времени RFC-1123, например 'Tue, 3 Jun 2008 11:05:30 GMT'. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
String |
format |
Форматирует объект даты и времени с помощью этого форматировщика. |
void |
formatTo |
Форматирует объект даты и времени в Appendable с помощью этого форматировщика. |
Chronology |
getChronology() |
Возвращает переопределяющую хронологию, используемую при форматировании. |
DecimalStyle |
getDecimalStyle() |
Возвращает DecimalStyle, используемый при форматировании. |
Locale |
getLocale() |
Возвращает локаль, используемую при форматировании. |
Set |
getResolverFields() |
Возвращает поля сопоставления, используемые при разборе. |
ResolverStyle |
getResolverStyle() |
Возвращает стиль сопоставления, используемый при разборе. |
ZoneId |
getZone() |
Возвращает переопределяющий часовой пояс, используемый при форматировании. |
DateTimeFormatter |
localizedBy |
Возвращает копию этого форматировщика с локализованными значениями локали, календаря, региона, десятичного формата и/или часового пояса, заменяющими значения в этом форматировщике. |
static DateTimeFormatter |
ofLocalizedDate |
Возвращает формат даты для указанной локали и хронологии ISO. |
static DateTimeFormatter |
ofLocalizedDateTime |
Возвращает форматировщик даты и времени для указанной локали и хронологии ISO. |
static DateTimeFormatter |
ofLocalizedDateTime |
Возвращает формат даты и времени для указанной локали и хронологии ISO. |
static DateTimeFormatter |
ofLocalizedPattern |
Создает форматировщик для указанной локали на основе запрошенного шаблона и хронологии ISO. |
static DateTimeFormatter |
ofLocalizedTime |
Возвращает формат времени для указанной локали и хронологии ISO. |
static DateTimeFormatter |
ofPattern |
Создает форматировщик с использованием указанного шаблона. |
static DateTimeFormatter |
ofPattern |
Создает форматировщик с использованием указанного шаблона и локали. |
TemporalAccessor |
parse |
Полностью разбирает текст, создавая временный объект. |
TemporalAccessor |
parse |
Разбирает текст с помощью этого форматировщика, позволяя управлять позицией в тексте. |
<T> T |
parse |
Полностью разбирает текст, создавая объект указанного типа. |
TemporalAccessor |
parseBest |
Полностью разбирает текст, создавая объект одного из указанных типов. |
static final TemporalQuery |
parsedExcessDays() |
Запрос, предоставляющий доступ к разобранным избыточным дням. |
static final TemporalQuery |
parsedLeapSecond() |
Запрос, позволяющий определить, был ли разобран високосный секундный интервал. |
TemporalAccessor |
parseUnresolved |
Разбирает текст с помощью этого форматировщика без разрешения результата; предназначено для расширенных сценариев использования. |
Format |
toFormat() |
Возвращает этот форматировщик как экземпляр java.text.Format. |
Format |
toFormat |
Возвращает этот форматировщик как экземпляр java.text.Format, который выполняет разбор с использованием указанного запроса. |
String |
toString() |
Возвращает описание базовых форматировщиков. |
DateTimeFormatter |
withChronology |
Возвращает копию этого форматировщика с новой переопределяющей хронологией. |
DateTimeFormatter |
withDecimalStyle |
Возвращает копию этого форматировщика с новым значением DecimalStyle. |
DateTimeFormatter |
withLocale |
Возвращает копию этого форматировщика с новой локалью. |
DateTimeFormatter |
withResolverFields |
Возвращает копию этого форматировщика с новым набором полей сопоставления. |
DateTimeFormatter |
withResolverFields |
Возвращает копию этого форматировщика с новым набором полей сопоставления. |
DateTimeFormatter |
withResolverStyle |
Возвращает копию этого форматировщика с новым стилем сопоставления. |
DateTimeFormatter |
withZone |
Возвращает копию этого форматировщика с новым переопределяющим часовым поясом. |
Подробное описание полей
ISO_LOCAL_DATE
public static final DateTimeFormatter ISO_LOCAL_DATE
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный локальный формат даты ISO-8601. Формат состоит из следующих элементов:
- Четыре или более цифр для
year. Годы в диапазоне от 0000 до 9999 дополняются слева нулями до четырех цифр. Для лет вне этого диапазона перед числом ставится знак «плюс» или «минус». - Дефис ('HYPHEN-MINUS', U+002D)
- Две цифры для
month-of-year. Значение дополняется слева нулем до двух цифр. - Дефис ('HYPHEN-MINUS', U+002D)
- Две цифры для
day-of-month. Значение дополняется слева нулем до двух цифр.
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения STRICT.
ISO_OFFSET_DATE
public static final DateTimeFormatter ISO_OFFSET_DATE
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты со смещением ISO-8601. Формат состоит из следующих элементов:
ISO_LOCAL_DATEoffset ID. Если смещение включает секунды, они также будут обработаны, хотя это не предусмотрено стандартом ISO-8601. При анализе регистр не учитывается.
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения STRICT.
ISO_DATE
public static final DateTimeFormatter ISO_DATE
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты 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-8601. Формат состоит из следующих элементов:
- Две цифры для
hour-of-day. Значение дополняется слева нулем до двух цифр. - Двоеточие
- Две цифры для
minute-of-hour. Значение дополняется слева нулем до двух цифр. - Если секунды в минуте недоступны, формат считается полным.
- Двоеточие
- Две цифры для
second-of-minute. Значение дополняется слева нулем до двух цифр. - Если наносекунды равны нулю или недоступны, формат считается полным.
- Десятичный разделитель
- От одной до девяти цифр для
nano-of-second. Выводится необходимое количество цифр.
Для возвращаемого форматтера не заданы переопределенная хронология или зона. Используется стиль разрешения STRICT.
ISO_OFFSET_TIME
public static final DateTimeFormatter ISO_OFFSET_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат времени со смещением ISO-8601. Формат состоит из следующих элементов:
ISO_LOCAL_TIMEoffset ID. Если смещение включает секунды, они также будут обработаны, хотя это не предусмотрено стандартом ISO-8601. При анализе регистр не учитывается.
Для возвращаемого форматтера не заданы переопределенная хронология или зона. Используется стиль разрешения STRICT.
ISO_TIME
public static final DateTimeFormatter ISO_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат времени со смещением 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-8601. Формат состоит из следующих элементов:
ISO_LOCAL_DATE- Буква 'T'. При анализе регистр не учитывается.
ISO_LOCAL_TIME
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения STRICT.
ISO_OFFSET_DATE_TIME
public static final DateTimeFormatter ISO_OFFSET_DATE_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты и времени со смещением ISO-8601. Формат состоит из следующих элементов:
ISO_LOCAL_DATE_TIMEoffset ID. Если смещение включает секунды, они также будут обработаны, хотя это не предусмотрено стандартом ISO-8601. Анализ смещения выполняется в нестрогом режиме, поэтому минуты и секунды необязательны. При анализе регистр не учитывается.
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения STRICT.
ISO_ZONED_DATE_TIME
public static final DateTimeFormatter ISO_ZONED_DATE_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать формат, расширяющий формат даты и времени со смещением ISO-8601 за счет добавления часового пояса. Раздел в квадратных скобках не является частью стандарта ISO-8601. Формат состоит из следующих элементов:
ISO_OFFSET_DATE_TIME- Если идентификатор зоны недоступен или является
ZoneOffset, формат считается полным. - Открывающая квадратная скобка '['.
zone ID. Это не является частью стандарта ISO-8601. При анализе учитывается регистр.- Закрывающая квадратная скобка ']'.
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения STRICT.
ISO_DATE_TIME
public static final DateTimeFormatter ISO_DATE_TIME
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный локальный формат даты и времени ISO-8601 или расширенный формат даты и времени со смещением, а также расширенный формат, не соответствующий ISO, с указанием часового пояса. Формат состоит из следующих элементов:
ISO_LOCAL_DATE_TIME- Если смещение недоступно для форматирования или анализа, формат считается полным.
offset ID. Если смещение включает секунды, они также будут обработаны, хотя это не предусмотрено стандартом ISO-8601.- Если идентификатор зоны недоступен или является
ZoneOffset, формат считается полным. - Открывающая квадратная скобка '['.
zone ID. Это не является частью стандарта ISO-8601. При анализе учитывается регистр.- Закрывающая квадратная скобка ']'.
Поскольку этот форматтер содержит необязательный элемент, может потребоваться выполнить анализ с помощью parseBest(CharSequence, TemporalQuery...).
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения STRICT.
ISO_ORDINAL_DATE
public static final DateTimeFormatter ISO_ORDINAL_DATE
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный порядковый формат даты ISO-8601. Формат состоит из следующих элементов:
- Четыре или более цифр для
year. Годы в диапазоне от 0000 до 9999 дополняются слева нулями до четырех цифр. Для лет вне этого диапазона перед числом ставится знак «плюс» или «минус». - Дефис ('HYPHEN-MINUS', U+002D)
- Три цифры для
day-of-year. Значение дополняется слева нулями до трех цифр. - Если смещение недоступно для форматирования или анализа, формат считается полным.
offset ID. Если смещение включает секунды, они также будут обработаны, хотя это не предусмотрено стандартом ISO-8601. При анализе регистр не учитывается.
Поскольку этот форматтер содержит необязательный элемент, может потребоваться выполнить анализ с помощью parseBest(CharSequence, TemporalQuery...).
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения STRICT.
ISO_WEEK_DATE
public static final DateTimeFormatter ISO_WEEK_DATE
Возвращает неизменяемый форматтер, способный форматировать и анализировать расширенный формат даты на основе недель ISO-8601. Формат состоит из следующих элементов:
- Четыре или более цифр для
week-based-year. Годы в диапазоне от 0000 до 9999 дополняются слева нулями до четырех цифр. Для лет вне этого диапазона перед числом ставится знак «плюс» или «минус». - Дефис ('HYPHEN-MINUS', U+002D)
- Буква 'W'. При анализе регистр не учитывается.
- Две цифры для
week-of-week-based-year. Значение дополняется слева нулем до трех цифр. - Дефис ('HYPHEN-MINUS', U+002D)
- Одна цифра для
day-of-week. Значения идут от понедельника (1) до воскресенья (7). - Если смещение недоступно для форматирования или анализа, формат считается полным.
offset ID. Если смещение включает секунды, они также будут обработаны, хотя это не предусмотрено стандартом ISO-8601. При анализе регистр не учитывается.
Поскольку этот форматтер содержит необязательный элемент, может потребоваться выполнить анализ с помощью parseBest(CharSequence, TemporalQuery...).
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения STRICT.
ISO_INSTANT
public static final DateTimeFormatter ISO_INSTANT
Возвращает неизменяемый форматтер, способный форматировать и анализировать формат момента времени 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-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. RFC-1123 обновляет RFC-822, заменяя двузначное представление года четырехзначным. Эта реализация требует четырехзначный год. Кроме того, эта реализация не обрабатывает североамериканские названия часовых поясов и военные обозначения часовых поясов, а поддерживает только 'GMT' и величины смещения.
Формат состоит из следующих элементов:
- Если день недели недоступен для форматирования или анализа, перейти к дню месяца.
- Трехбуквенное
day-of-weekна английском языке. - Запятая
- Пробел
- Одна или две цифры для
day-of-month. - Пробел
- Трехбуквенное
month-of-yearна английском языке. - Пробел
- Четыре цифры для
year. Поддерживаются только годы в диапазоне от 0000 до 9999. - Пробел
- Две цифры для
hour-of-day. Значение дополняется слева нулем до двух цифр. - Двоеточие
- Две цифры для
minute-of-hour. Значение дополняется слева нулем до двух цифр. - Если секунды в минуте недоступны, перейти к следующему пробелу.
- Двоеточие
- Две цифры для
second-of-minute. Значение дополняется слева нулем до двух цифр. - Пробел
offset IDбез двоеточий и секунд. Для нулевого смещения используется "GMT". Североамериканские названия часовых поясов и военные обозначения часовых поясов не обрабатываются.
При анализе регистр не учитывается.
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения SMART.
Подробное описание методов
ofPattern
public static DateTimeFormatter ofPattern(String pattern)
Этот метод создает форматтер на основе простого шаблона из букв и символов, описанного в документации класса. Например, d MMM uuuu отформатирует 2011-12-03 как '3 Dec 2011'.
Форматтер использует default FORMAT locale. Это значение можно изменить с помощью withLocale(Locale) для возвращаемого форматтера. Также можно воспользоваться вариантом этого метода ofPattern(String, Locale).
Для возвращаемого форматтера не заданы переопределенная хронология или зона. Используется стиль разрешения SMART.
- Параметры:
-
pattern— используемый шаблон, не null - Возвращает:
- форматтер на основе шаблона, не null
- Исключения:
-
IllegalArgumentException— если шаблон недопустим - См. также:
ofPattern
public static DateTimeFormatter ofPattern(String pattern, Locale locale)
Этот метод создает форматтер на основе простого шаблона из букв и символов, описанного в документации класса. Например, d MMM uuuu отформатирует 2011-12-03 как '3 Dec 2011'.
Форматтер использует указанную локаль. Ее можно изменить с помощью withLocale(Locale) для возвращаемого форматтера.
Для возвращаемого форматтера не заданы переопределенная хронология или зона. Используется стиль разрешения SMART.
- Параметры:
-
pattern— используемый шаблон, не null -
locale— используемая локаль, не null - Возвращает:
- форматтер на основе шаблона, не null
- Исключения:
-
IllegalArgumentException— если шаблон недопустим - См. также:
ofLocalizedDate
public static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle)
Возвращает форматтер, который форматирует или анализирует дату. Точный шаблон формата зависит от локали.
Локаль определяется форматтером. Форматтер, непосредственно возвращаемый этим методом, использует default FORMAT locale. Локаль можно задать с помощью withLocale(Locale) для результата этого метода.
Обратите внимание, что локализованный шаблон ищется отложенно. Этот DateTimeFormatter хранит необходимый стиль и локаль, а поиск нужного шаблона выполняет по запросу.
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения SMART.
- Параметры:
-
dateStyle— требуемый стиль форматтера, не null - Возвращает:
- форматтер дат, не null
ofLocalizedTime
public static DateTimeFormatter ofLocalizedTime(FormatStyle timeStyle)
Возвращает форматтер, который форматирует или анализирует время. Точный шаблон формата зависит от локали.
Локаль определяется форматтером. Форматтер, непосредственно возвращаемый этим методом, использует default FORMAT locale. Локаль можно задать с помощью withLocale(Locale) для результата этого метода.
Обратите внимание, что локализованный шаблон ищется отложенно. Этот DateTimeFormatter хранит необходимый стиль и локаль, а поиск нужного шаблона выполняет по запросу.
Для возвращаемого форматтера задана хронология ISO, чтобы даты в других календарных системах преобразовывались правильно. Переопределенная зона не задана; используется стиль разрешения SMART. Для стилей FULL и LONG обычно требуется часовой пояс. При форматировании с использованием этих стилей должен быть доступен ZoneId — его можно задать с помощью ZonedDateTime или withZone(ZoneId).
- Параметры:
-
timeStyle— требуемый стиль форматтера, не null - Возвращает:
- форматтер времени, не null
ofLocalizedDateTime
public static DateTimeFormatter ofLocalizedDateTime(FormatStyle dateTimeStyle)
Возвращает форматтер, который форматирует или анализирует дату и время. Точный шаблон формата зависит от локали.
Локаль определяется форматтером. Форматтер, непосредственно возвращаемый этим методом, использует 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)
Возвращает форматтер, который форматирует или анализирует дату и время. Точный шаблон формата зависит от локали.
Локаль определяется форматтером. Форматтер, непосредственно возвращаемый этим методом, использует 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)
"G{0,5}" + // Era
"y*" + // Year
"Q{0,5}" + // Quarter
"M{0,5}" + // Month
"w*" + // Week of Week Based Year
"E{0,5}" + // Day of Week
"d{0,2}" + // Day of Month
"B{0,5}" + // Period/AmPm of Day
"[hHjC]{0,2}" + // Hour of Day/AmPm (refer to LDML for 'j' and 'C')
"m{0,2}" + // Minute of Hour
"s{0,2}" + // Second of Minute
"[vz]{0,4}" // Zone
Сопоставление запрошенного шаблона с наиболее подходящим из доступных локализованных форматов определяется спецификацией Unicode LDML. Например, форматтер, созданный из запрошенного шаблона yMMM, преобразует дату «2020-06-16» в «Jun 2020» для US locale.
Локаль определяется форматтером. Форматтер, непосредственно возвращаемый этим методом, использует default FORMAT locale. Локаль можно задать с помощью withLocale(Locale) для результата этого метода.
Возвращаемый форматтер не имеет переопределенной зоны. Он использует стиль разрешения SMART.
- Параметры:
-
requestedTemplate— запрошенный шаблон, не null - Возвращает:
- форматтер на основе шаблона
requestedTemplate, не null - Исключения:
-
IllegalArgumentException— еслиrequestedTemplateнедопустим - С версии:
- 19
- Внешние спецификации
- См. также:
parsedExcessDays
public static final TemporalQuery<Period> parsedExcessDays()
Возвращает одиночный запрос, предоставляющий доступ к дополнительным сведениям, полученным при разборе. Запрос всегда возвращает период, не равный null; вместо 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
public DateTimeFormatter localizedBy(Locale locale)
Она используется для поиска локализованных элементов форматтера, например текста или локализованного шаблона. Если локаль содержит расширения Unicode «ca» (календарь), «nu» (система счисления), «rg» (переопределение региона) и/или «tz» (часовой пояс), переопределяются хронология, система счисления и/или часовой пояс. Если указаны оба расширения «ca» и «rg», хронология из расширения «ca» имеет приоритет над неявной хронологией из расширения «rg». То же относится к расширению «nu».
В отличие от метода withLocale, результат вызова этого метода может отличаться в зависимости от порядка цепочки вызовов с другими методами withXXXX().
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
locale— локаль, не null - Возвращает:
- форматтер на основе этого форматтера с локализованными значениями календаря, десятичного формата и/или часового пояса, которые имеют приоритет над значениями в этом форматтере.
- С версии:
- 10
- См. также:
getDecimalStyle
public DecimalStyle getDecimalStyle()
- Возвращает:
- DecimalStyle этого форматтера, не null
withDecimalStyle
public DateTimeFormatter withDecimalStyle(DecimalStyle decimalStyle)
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
decimalStyle— новый DecimalStyle, не null - Возвращает:
- форматтер на основе этого форматтера с запрошенным DecimalStyle, не null
getChronology
public Chronology getChronology()
Возвращает переопределяющую хронологию, используемую для преобразования дат. По умолчанию у форматтера нет переопределяющей хронологии, поэтому возвращается null. Дополнительные сведения о переопределении см. в разделе withChronology(Chronology).
- Возвращает:
- переопределяющая хронология этого форматтера или null, если переопределения нет
withChronology
public DateTimeFormatter withChronology(Chronology chrono)
Возвращает форматтер, состояние которого аналогично состоянию этого форматтера, но задана переопределяющая хронология. По умолчанию у форматтера нет переопределяющей хронологии, поэтому возвращается null.
Если задано переопределение, оно влияет на любую форматируемую или разбираемую дату.
При форматировании, если временный объект содержит дату, она будет преобразована в дату переопределяющей хронологии. Наличие даты во временном объекте определяется запросом поля EPOCH_DAY. Любые значения времени или часового пояса сохраняются без изменений, если только они не переопределены.
Если временный объект не содержит дату, но содержит одно или несколько полей даты ChronoField, выбрасывается DateTimeException. Во всех остальных случаях переопределяющая хронология добавляется к временному объекту, заменяя любую предыдущую хронологию, но не изменяя дату/время.
При разборе следует учитывать два отдельных случая. Если хронология была непосредственно разобрана из текста, например, потому что использовался метод DateTimeFormatterBuilder.appendChronologyId(), переопределяющая хронология не действует. Если часовой пояс не был разобран, эта переопределяющая хронология будет использоваться для преобразования значений ChronoField в дату в соответствии с правилами разрешения дат хронологии.
Этот экземпляр неизменяем, и вызов данного метода на него не влияет.
- Параметры:
-
chrono— новая хронология; null, если переопределение отсутствует - Возвращает:
- форматтер на основе этого форматтера с запрошенной переопределяющей хронологией, не null
getZone
public ZoneId getZone()
Возвращает переопределяющий часовой пояс, используемый для преобразования моментов времени. По умолчанию у форматтера нет переопределяющего часового пояса, поэтому возвращается null. Дополнительные сведения о переопределении см. в разделе withZone(ZoneId).
- Возвращает:
- переопределяющий часовой пояс этого форматтера или null, если переопределения нет
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
© 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