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

Введение Java предоставляет обширный API для обработки даты и времени. В этой статье мы будем использовать Java SimpleDateFormat для форматирования дат. Перед форматированием дат вам необходимо узнать, как получить текущую дату и время в Java [/ how-to-get-current-date-and-time-in-java]. Спецификаторы формата Спецификаторы формата даты и времени используются для построения шаблонов для представления данных в формате, в котором мы хотели бы их представить. В реальном мире некоторые компоненты даты или времени часто представлены в большем количестве.

Вступление

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

Перед форматированием дат вам нужно знать, как получить текущую дату и время в Java .

Спецификаторы формата

Спецификаторы формата даты и времени используются для построения шаблонов для представления данных в формате, в котором мы хотели бы их представить.

В реальном мире некоторые компоненты даты или времени часто представлены более чем одним способом. Когда дело доходит до спецификаторов формата времени и даты в Java, эти компоненты также имеют два или более представлений - иногда удобно использовать короткую версию, в то время как более длинные версии более краткие и официальные.

SimpleDateFormat

SimpleDateFormat работает только с Date и. В Java 8 добавлено несколько других классов для замены существующего API даты и времени, поэтому нет ничего необычного в том, что при обработке объектов Date

Создать 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"); 

Примечание: в этом шаблоне мы хотели, чтобы некоторые слова интерпретировались буквально, поэтому мы использовали одинарные кавычки.

Для краткости мы поместили Правила форматирования в конце статьи, если вы с ними не знакомы.

Форматирование System.currentTimeMillis ()

Форматировать количество миллисекунд, прошедших с эпохи UNIX, а именно 1 января 1970 г., 00:00:00 GMT , довольно просто:

 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 значение преобразуется в Date .

Форматирование java.util.Date

Форматирование Date практически такое же, хотя мы сами предоставляем экземпляр 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.Calendar

Использование Calendar упрощает настройку дат и экспериментирование с ними. Если какая-то важная временная метка требует выделения, это легко сделать с помощью Calendar :

 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 

Правила форматирования

Для ясности, если вы еще не знакомы с правилами / шаблонами форматирования, используемыми в статье, вот список наиболее часто используемых спецификаторов формата:


Персонаж Компонент даты Тип содержимого Пример или времени

Г / г Год Год 1969; 69

M Месяц в году Месяц Август; Август; 08

ш Неделя в году Число 21 год

W Неделя в месяц Число 2

d День в месяце Число 07; 15

D День в году Число 176

F День недели в Число 2; 3 месяце\
(например, второй
вторник в этом
месяце)

E Название дня Текст Понедельник; пн недели

ты Номер дня недели\ Число 1 (Понедельник = 1)

а Маркер am / pm Текст ДО ПОЛУДНЯ, ПОСЛЕ ПОЛУДНЯ

час Час в am / pm Число 12 (1-12)

ЧАС Час в день (0-23) Число 0

k Час в день (1-24) Число 24

K Час в am / pm Число 0 (0-11)

м Минута в час Число 43 год

s Секунда в минуту Число 58

S Милисекунда в Число 965 секунду

z Часовой пояс Часовой пояс CEST; GMT-08: 00

грамм Обозначение эпохи Текст ОБЪЯВЛЕНИЕ


Каждый тип контента следует определенным правилам, главным образом в отношении количества символов шаблона, используемых в шаблоне форматирования:

  • Год - если Calendar форматтера является григорианским и количество символов шаблона равно 2, год усекается до двух крайних правых цифр, в противном случае он интерпретируется как число. В других календарях применяются специальные формы для календаря.
  • Месяц - если количество символов шаблона составляет 3 или более, месяц отображается в виде текста; в противном случае это отображается как число. Доступны краткие и полные текстовые формы - если количество символов шаблона равно 4 или более, отображается полная форма; в противном случае отображается короткий.
  • Число - количество символов шаблона - это минимальное количество цифр. Если это число больше, чем количество цифр, которые нам действительно нужны для представления числа, тогда к числу добавляется префикс с соответствующим количеством нулей.
  • Текст - если количество символов шаблона равно 4 или более, используется полная форма; в противном случае используется краткая или сокращенная форма, если таковая имеется.
  • Часовой пояс - они отображаются в виде текста, если у них есть имена. Доступны краткая и полная форма - если количество символов шаблона равно 4 или более, отображается полная форма; в противном случае отображается короткий. У некоторых часовых поясов нет имен, и они могут отображаться в различных формах, одна из которых, например, значение смещения по Гринвичу.

Вот несколько примеров шаблонов и результатов, которые они дают:


Шаблон даты и времени Результат "EEEE, MMM дд. Yyyy. - H: mm aa zzzz" Пятница, 15 августа 1969 г. - 17:35 по центральноевропейскому стандартному времени. "EEE, MMM дд. Yyyy. - H: mm aa zz" Пт, 15 августа 1969. - 17:35 CET «ММММ гггг. GGGG» Сентябрь 0200 г. н.э. "МММ ггг. ГГ" Сентябрь 200 г. н.э. «ММ-дд-гггг ЧЧ: мм: сс: SSSS» 09-15-2020 17: 35: 27: 0953


Заключение

В этой статье мы рассмотрели SimpleDateFormat и то, как мы можем использовать его для форматирования дат.

Мы отформатировали текущее время (в миллисекундах) с начала времени UNIX, обычного объекта Date Calendar .

Наконец, мы рассмотрели спецификаторы форматирования и правила форматирования, применяемые к результатам SimpleDateFormat

comments powered by Disqus