Поиск по сайту:

Java SimpleDateFormat — формат даты Java


Введение

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

Формат даты Java

  • DateFormat используется для форматирования даты в String на основе определенного языкового стандарта, предоставленного в качестве входных данных.
  • Язык используется для указания региона и языка, чтобы сделать код более локальным для пользователя.
  • Способ написания даты отличается в разных регионах мира. Например, 31 декабря 2017 будет записано в Индии как 31-12-2017, но то же самое будет написано в Соединенных Штатах Америки как 12- 31-2017.
  • Классы
  • DateFormat не синхронизируются, рекомендуется создавать отдельный экземпляр для каждого потока.

Объект DateFormat можно создать с помощью методов getDateInstance() и getTimeInstance() класса DateFormat.

Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);

Примечание. Конструктор Locale(String, String) устарел, начиная с версии 19.

Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();

Методу getDateInstance элемента DateFormat требуются два входных параметра. Первый параметр указывает используемый DateFormat, а второй параметр — языковой стандарт.

Использование формата

Класс DateFormat имеет метод format, который отвечает за форматирование.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Этот код отформатирует дату на французском языке (fr) и в регионе Франции (FR):

Output
3 janv. 2018

Использование getTimeInstance()

Для создания экземпляра DateFormat мы используем метод getDateInstance().

Для выполнения формата времени нам нужен экземпляр времени. Мы будем использовать метод getTimeInstance() для получения экземпляра времени.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Этот код отформатирует время на французском языке (fr) и в регионе Франции (FR):

Output
11:03:01

Java SimpleDateFormat

SimpleDateFormat аналогичен DateFormat. Единственное существенное различие между ними заключается в том, что SimpleDateFormat можно использовать для форматирования (преобразование Date в String) и для синтаксического анализа (String в Date преобразование) с поддержкой локали, тогда как DateFormat не поддерживает локаль. DateFormat — это абстрактный класс, обеспечивающий базовую поддержку форматирования и синтаксического анализа даты. SimpleDateFormat — это конкретный класс, расширяющий класс DateFormat.

SimpleDateFormat можно создать с помощью конструктора SimpleDateFormat. Конструктор является параметризованным конструктором и нуждается в шаблоне String в качестве параметра.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

Строка pattern — это шаблон, который будет использоваться для форматирования даты, и выходные данные будут сгенерированы в этом шаблоне как \MM-dd-yyyy.

Узоры

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

Letter for Pattern Date or Time component Examples
G Era designator AD
y Year 2018 (yyyy), 18 (yy)
M Month in year July (MMMM), Jul (MMM), 07 (MM)
w Results in week in year 16
W Results in week in month 3
D Gives the day count in the year 266
d Day of the month 09 (dd), 9(d)
F Day of the week in month 4
E Day name in the week Tuesday, Tue
u Day number of week where 1 represents Monday, 2 represents Tuesday and so on 2
a AM or PM marker AM
H Hour in the day (0-23) 12
k Hour in the day (1-24) 23
K Hour in am/pm for 12 hour format (0-11) 0
h Hour in am/pm for 12 hour format (1-12) 12
m Minute in the hour 59
s Second in the minute 35
S Millisecond in the minute 978
z Timezone Pacific Standard Time; PST; GMT-08:00
Z Timezone offset in hours (RFC pattern) -0800
X Timezone offset in ISO format -08; -0800; -08:00

Некоторые буквы должны использоваться в разном количестве для разных результатов, например, для месяца:

Type Pattern Example Output
Full Month MMMM July
Abbreviated Month MMM Jul
Numeric Month MM 07

Примеры

Давайте теперь рассмотрим несколько примеров для различных форматов даты и времени.

Pattern Result
MM/dd/yyyy 01/02/2018
dd-M-yyyy hh:mm:ss 02-1-2018 06:07:59
dd MMMM yyyy 02 January 2018
dd MMMM yyyy zzzz 02 January 2018 India Standard Time
E, dd MMM yyyy HH:mm:ss z Tue, 02 Jan 2018 18:07:59 IST

Использование SimpleDateFormat()

Чтобы проанализировать дату, нам нужно создать экземпляр SimpleDateFormat с помощью конструктора, а затем использовать метод format():

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Этот код выведет \MM-dd-yyyy”:

Output
01-02-2018

Этот шаблон создает «месяц в году», «день в месяце» и «год». Тип символа (и заглавные буквы) и количество символов влияют на строку. Месяц будет представлен двумя цифрами, день в виде двух цифр и год в виде четырех цифр.

Этот код отображал дату «2 января 2018 г.» как «01-02-2018».

Для времени синтаксического анализа мы должны изменить шаблон при создании экземпляра SimpleDateFormat.

String pattern = "HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Этот код выведет \HH:mm:ss.SSSZ”:

Output
13:03:15.454+0530

Этот шаблон выдает «часы», «минуты», «секунды», «миллисекунды» и «смещение часового пояса в часах (шаблон RFC)».

Этот код отображал время как \13:03:15.454+0530.

Использование синтаксического анализа()

Разбор — это преобразование строки в экземпляр java.util.Date. Мы можем разобрать строку на экземпляр даты, используя метод parse() класса SimpleDateFormat. Для синтаксического анализа строки на дату нам нужен экземпляр класса SimpleDateFormat и шаблон строки в качестве входных данных для конструктора класса.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);

Это выведет дату (12-01-2018) без указания времени:

Output
Sat Dec 01 00:00:00 IST 2018

Теперь давайте посмотрим на пример SimpleDateFormat для анализа времени.

String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);

Это выведет время (22:00:03) без указанной даты:

Output
Thu Jan 01 22:00:03 IST 1970

Поскольку мы не указали какую-либо дату, программа считала эпоху датой (например, 01-Jan-1970).

Использование локали

Мы работали с Locale как частью DateFormat и видели, что локали используются в зависимости от региона.

String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("fr", "FR"));
Date date = simpleDateFormat.format(new Date());
System.out.println(date);

Этот код отформатирует текущее время на французском языке (fr) и в регионе Франции (FR):

Output
mardi janvier 2018 14:51:02.354+0530

День и месяц названы по-французски на основе Locale, предоставленного в качестве входных данных: mardi – вторник, а janvier – январь. .

Заключение

В этой статье вы узнали о форматах SimpleDateFormat и DateFormat в Java.

Ссылка:

  • Документ по API SimpleDateFormat
  • Документ по API DateFormat