Автор оригинала: Mina Krivokuća.
Вступление
Java предоставляет обширный API для обработки даты и времени. В этой статье мы будем использовать Java SimpleDateFormat для форматирования дат.
Прежде чем форматировать даты, вы должны знать, как получить текущую дату и время в Java .
Спецификаторы формата
Спецификаторы формата даты и времени используются для построения шаблонов представления данных в формате, в котором мы хотели бы их представить.
В реальном мире некоторые компоненты даты или времени часто представлены более чем одним способом. Когда дело доходит до спецификаторов формата времени и даты в Java, эти компоненты также имеют два или более представлений – иногда удобно использовать короткую версию, в то время как более длинные версии более лаконичны и официальны.
SimpleDateФормат
SimpleDateFormat
работает только с Данными
объектами и . В Java 8 для замены существующего API даты и времени добавляется несколько других классов, поэтому при обработке объектов Дата
нередко можно наткнуться на устаревшие конструкторы и методы.
Создать объект SimpleDateFormat
довольно просто. Конструктор принимает строковый шаблон:
SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMM dd. yyyy.");
Стоит отметить, что если мы вызовем конструктор без аргументов, объект форматирования будет создан с шаблоном по умолчанию:
MM/dd/yy, H:mm aa
Если мы позже изменим свое мнение об этом шаблоне, мы всегда сможем применить другой к ранее созданному объекту, и старый будет переопределен:
formatter.applyPattern("'date': yyyy.MM.dd -- 'time': H:mm:ss");
Примечание: В этом шаблоне мы хотели, чтобы некоторые слова интерпретировались буквально, поэтому мы избежали их одинарными кавычками.
Для краткости мы поместили Правила форматирования в конце статьи, если вы с ними не знакомы.
Система форматирования.currentTimeMillis()
Форматирование количества миллисекунд, прошедших с эпохи UNIX, а именно 1 января 1970 года, 00:00:00 по Гринвичу , довольно простое:
SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMM dd. yyyy. -- H:mm aa"); String formatted = formatter.format(System.currentTimeMillis()); System.out.println(formatted);
Запуск этого фрагмента кода дает:
Tue, Aug 11. 2020. -- 4:48 AM
Внутренне значение long
преобразуется в Дату
.
Форматирование java.util.Date
Форматирование Даты
по сути то же самое, хотя мы сами предоставляем экземпляр Даты
:
SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMM dd. yyyy. -- H:mm aa"); Date date = new Date(); String formatted = formatter.format(date); System.out.println(formatted);
В результате получается:
Tue, Aug 11. 2020. -- 4:52 AM
Форматирование java.util.Календарь
Использование Календаря
упрощает настройку и настройку пользовательских дат. Если какая-то важная отметка времени требует акцента, это легко сделать с помощью Календаря
:
SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMM dd. yyyy. -- H:mm aa"); Calendar calendar = Calendar.getInstance(); calendar.set(1969, Calendar.AUGUST, 15, 17, 35, 27); # SimpleDateFormat works with Dates Date date = calendar.getTime(); String formatted = formatter.format(date); System.out.println(formatted);
В результате получается:
Fri, Aug 15. 1969. -- 17:35 PM
Правила форматирования
Для ясности, если вы еще не знакомы с правилами/шаблонами форматирования, используемыми в статье, вот список наиболее часто используемых спецификаторов формата:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
1969;69 | И/и | Year | Год |
Август;Август;08 | M | Month | Месяц в году |
21 | w | Number | Неделя в году |
2 | W | Number | Неделя в месяце |
07;15 | d | Number | День в месяце |
176 | D | Number | День в году |
2;3 | F | Number | День недели в месяце (например, второй вторник в этом месяце) |
Понедельник;Пн | E | Text | Название дня в неделе |
1 | u | Number | Число дней недели ) |
PM;AM | a | Text | Маркер Am/pm |
12 | h | Number | Час в am/pm (1-12) |
0 | H | Number | Час в день (0-23) |
24 | k | Number | Час в день (1-24) |
0 | K | Number | Час в am/pm (0-11) |
43 | m | Number | Минута в час |
58 | s | Number | Секунда в минуту |
965 | S | Number | Миллисекунда в секунду |
CEST;GMT-08:00 | z | Часовой пояс | Часовой пояс |
РЕКЛАМА | G | Текст | Обозначение эпохи |
Каждый тип контента следует определенным правилам, главным образом в отношении количества символов шаблона, используемых в шаблоне форматирования:
- Год – Если форматирующий
Календарь
является григорианским, а количество символов шаблона равно 2, год усекается до 2 крайних правых цифр, в противном случае он интерпретируется как число. В других календарях применяются формы, специфичные для календаря. - Месяц – Если количество символов шаблона равно 3 или более, месяц отображается в виде текста; в противном случае он отображается в виде числа. Доступны короткие и полные текстовые формы – если количество символов шаблона равно 4 или более, отображается полная форма; в противном случае отображается короткая форма.
- Число – Количество символов шаблона-это минимальное количество цифр. Если это число больше, чем количество цифр, которые нам действительно нужны для представления числа, то к числу добавляется соответствующее количество нулей.
- Текст – Если количество символов шаблона равно 4 или более, используется полная форма; в противном случае используется краткая или сокращенная форма, если таковая имеется.
- Часовой пояс – Они отображаются в виде текста, если у них есть имена. Доступны короткая и полная форма – если количество символов шаблона равно 4 или более, отображается полная форма; в противном случае отображается короткая форма. Некоторые часовые пояса не имеют названий, и они могут отображаться в различных формах, например, значение смещения по Гринвичу.
Вот несколько примеров шаблонов и результатов, которые они дают:
Пятница, 15 августа 1969 г. — 17:35 по Центральноевропейскому стандартному времени | “”ЭЭЭ, МММ дд. гггг. — H:мм aa zzzz” |
Пт, 15 августа 1969 г. — 17:35 по центральноевропейскому времени | “ЭЭЭ, МММ дд. гггг. — H:мм aa zz” |
Сентябрь 0200. н. э. | “ММММ гггг. ГГГГ” |
200 сентября н. э. | “”МММ гггг. ГГ” |
09-15-2020 17:35:27:0953 | “ММ-дд-гггг ЧЧ:мм:сс:СССС” |
Вывод
В этой статье мы рассмотрели класс SimpleDateFormat
и то, как мы можем использовать его для форматирования дат.
Мы отформатировали текущее время (в миллисекундах) с начала времени UNIX, обычный объект Дата
и объект Календарь
.
Наконец, мы рассмотрели спецификаторы форматирования и правила форматирования, применяемые к результатам SimpleDateFormat
.