Автор оригинала: 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 .