1. Класс DateTimeFormatter
В Date Time API был добавлен специальный класс DateTimeFormatter
. Его цель — по максимуму облегчить преобразование даты и времени именно в тот формат, который нужен программисту. И можно сказать, что создателям Java это удалось.
Пользоваться им очень просто. Сначала нужно создать объект класса DateTimeFormatter
и передать в него шаблон, по которому будут отображаться дата и время:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(шаблон);
Где dtf
— это переменная типа DateTimeFormatter
. DateTimeFormatter.ofPattern()
— это статический метод класса DateTimeFormatter
. А шаблон — это строка, которая задает шаблон, по которому будут отображаться дата и время.
Примеры
Код | Вывод на экран |
---|---|
|
|
В примере выше мы с помощью метода ofPattern()
создаем объект DateTimeFormatter
на основе строки-шаблона. А в следующей строке с помощью метода format()
преобразовываем объект типа LocalDateTime
в строку. Результат вы видите на экране.
В метод format()
можно передать практически любой объект из Date Time API.
Статический метод ofPattern()
тоже очень простой: принимает в качестве параметра строку-шаблон, а возвращает объект типа DateTimeFormatter
. Самое интересное находится внутри шаблона.
2. Шаблон форматирования
Строка, переданная в качестве паттерна, используется как шаблон при выводе информации. MM заменяется на номер месяца, dd — на день месяца, yy на номер года. Регистр букв имеет значение.
Полная таблица преобразования времени выглядит так:
Буква | Обозначение |
---|---|
y | Год (Year) |
M | Месяц (Month) |
d | День (day) |
H | Часы (Hours) |
m | Минуты (Minutes) |
s | Секунды (Seconds) |
S | Тысячные доли секунды |
n | Наносекунды. |
В принципе запомнить не сложно.
А почему тогда в шаблоне из примера буквы MM, dd и yy были написаны по два раза? А вот тут уже становится интереснее.
Общая идея
Количество букв влияет на длину текста. Чем большое букв, тем длиннее будет текст.
Если буква H указывается один раз, то 9 часов будут отображаться как 9, а если буква H указывается два раза подряд, то 9 часов будут отображаться как 09.
Если буква y указывается 2 раза подряд, то год пишется 2 цифрами, если 4 раза подряд — 4-мя цифрами.
Если буква M указывается 2 раза подряд, то пишется номер месяца, если 3 раза подряд, то название месяца (3 первых буквы), если 4 раза подряд, то полное название месяца.
Пример:
Код | Вывод на экран |
---|---|
|
|
3. Полная таблица шаблонов
Полная таблица достаточно большая и очень интересная:
Шаблон | Вариации шаблона | Пример | Описание |
---|---|---|---|
y | yy, yyyy | 19; 2019 | Год |
M/L | M, MM, MMM, MMMM, MMMMM | 1; 01; Jan; January; J | Месяц |
d | d, dd | 9; 09 | День |
H | H, HH | 2; 02 | Часы |
m | m, mm | 3; 03 | Минуты |
s | s, ss | 5; 05 | Секунды |
S | S, SS, SSS, ... | 1; 12; 123 | Тысячные доли секунды |
n | n | 123456789 | Наносекунды |
G | G, GGGG, GGGGG | AD; Anno Domini; A; | Эра |
Q/q | q, qq, qqq, qqqq | 3; 03; Q3; 3rd quarter | Квартал |
w | w | 13 | Неделя года |
W | W | 3 | Неделя месяца |
E | EEE, EEEE, EEEEE | Mon; Monday; M | День недели |
e/c | e, ee, eee, eeee, eeeee | 1; 01; Mon; Monday; M | День недели |
a | a | PM | AM или PM |
h | h | 12 | Время 1-12 часов. |
V | VV | Europe/Helsinki | Временная зона |
z | z zzzz | EET; Eastern European Standard Time | Временная зона |
O | O OOOO | GMT+2; GMT+02:00 | Временная зона |
Это, кстати, еще не самый полный вариант. Самый полный находится по ссылке:
https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/time/format/DateTimeFormatter.html
4. Парсинг времени
Класс DateTimeFormatter
интересен еще и тем, что может не только преобразовывать дату и время в строку по заданному шаблону, но и выполнять обратную операцию!
Анализ и разбор строки называют парсингом от слова parse.
Вот как выглядит такой процесс:
Код | Вывод на экран |
---|---|
|
|
Сначала мы создаем объект DateTimeFormatter
и задаем в нем шаблон парсинга.
Затем вызываем метод LocalDate.parse()
или LocalTime.parse()
или LocalDateTime.parse()
и передаем в этот метод строку, которую нужно распарсить и объект DateTimeFormatter
, который понимает, как и по какому шаблону нужно распарсивать переданный текст.
Еще один пример: на этот раз с парсингом времени.
Код | Вывод на экран |
---|---|
|
|
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ