Рубрики
Без рубрики

Java: Форматирование дат с помощью SimpleDateFormat

В этой статье мы будем использовать класс SimpleDateFormat Java с примерами, чтобы показать, как форматировать дату и календарь на Java.

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