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
):
Output3 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
):
Output11: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
”:
Output01-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
”:
Output13: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
) без указания времени:
OutputSat 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
) без указанной даты:
OutputThu 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
):
Outputmardi janvier 2018 14:51:02.354+0530
День и месяц названы по-французски на основе Locale
, предоставленного в качестве входных данных: mardi
– вторник, а janvier
– январь. .
Заключение
В этой статье вы узнали о форматах SimpleDateFormat
и DateFormat
в Java.
Ссылка:
- Документ по API SimpleDateFormat
- Документ по API DateFormat