— Я згадав, що хотів розповісти тобі трохи про роботу з датами.

— Так ви мені вже розповідали, що Java існує клас Date, за допомогою якого можна працювати з датою.

— Гм. З деякого часу клас Date застарів.

Зараз замість нього радять використовувати клас Calendar, який має метод getTime(), який і повертає поточну дату.

Ось як зазвичай створюється об'єкт типу Календар:

Створення об'єкта календар
Calendar cal = Calendar.getInstance();

— Коли ти викликаєш цей метод, залежно від налаштувань твого комп'ютера, буде створено календар.

— Потрібний? Їх що кілька?

— Ага. Більше того, правильно було б сказати актуальний. Справа в тому, що на Землі не один, а багато календарів. І майже кожен із них пов'язаний з якоюсь релігією чи країною.

Залежно від того, в якій країні ти перебуваєш, рік може бути іншим.

Ось приклади найпоширеніших календарів.

Клас календаря Назва календаря
GregorianCalendar Християнський Грегоріанський календар
BuddhistCalendar Буддистський календар
JapaneseImperialCalendar Японський Імператорський календар

Є ще Китайський календар, Ісламський календар та багато інших.

— Ясно.

— Щоб дізнатися про поточну дату, треба написати такий код:

Як дізнатися поточний час
Calendar cal = Calendar.getInstance() ;
Date date = cal.getTime();

У класу календар є багато методів, які дозволяють швидко отримати будь-яку інформацію про дату та час.

Код Коментарі
Calendar calendar = Calendar.getInstance();

int era = calendar.get(Calendar.ERA);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);

int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);

ера
рік
місяць
день місяця

день тижня (пн, вт, ср...)
година
хвилина
секунда

Іноді дійсно потрібно отримати лише частину інформації. Наприклад, який сьогодні рік, чи якийсь день тижня.

Але іноді потрібно просто вивести дату в потрібному форматі.

Наприклад, у лог-файл або ще кудись.

Або зробити формат, який налаштовував би користувач. Як тоді бути?

Для цього також є спеціальні класи. І клас SimpleDateFormat відмінно справляється з описаним тобою завданням:

Як привести дату до потрібного формату
Calendar calendar = Calendar.getInstance();

DateFormat formatter = новий SimpleDateFormat("MM-DD-YY");

String message = formatter.format(calendar.getTime());

— Ага. Я пам'ятаю. Ви мені вже щось таке пояснювали проSimpleDateFormat, але я чесно кажучи, не дуже запам'ятав.

Тут все дуже просто. Створюєш об'єкт типу SimpleDateFormat і передаєш у нього шаблон дати, яку хочеш отримати. Потім викликаєш метод format, і він наводить тобі передану дату до потрібного вигляду.

— Звучить цікаво. Мені б більше подробиць.

— Будуть тобі подробиці. Ось які ключові слова у шаблоні бувають:

Ключове слово Опис
G замінять на еру дати (н.е. або до н.е.)
y замість цього символу буде встановлено рік
M замінюється на місяць
w номер тижня на рік
W порядковий номер тижня на місяць
D номер дня на рік
d день місяця
F номер дня тижня на місяці
E день тижня
a AM/PM (до обіду чи після)
H година у 24-годинному форматі (0-23)
k година у 24-годинному форматі (1-24)
K година у 12-годинному форматі (0-11)
h година у 12-годинному форматі (1-12)
m хвилини
s секунди
S мілісекунди
z годинна зона у форматі Pacific Standard Time, PST
Z годинна зона у форматі -0800

— Круто! Майже все, що потрібно.

— Тут ще є додаткові нюанси із подвоєнням цих символів.

Якщо ти напишеш YY, то отримаєш дві останні цифри року, якщо YYYY – то повний рік із чотирьох цифр.

З місяцем теж не все просто. MM – це число місяця. MMM - це трилітерне скорочення місяця (Jan, Feb, Mar, Apr, May, ...). Якщо MMMM – повна назва місяця.

Дні тижня можна також вивести повністю - EEEE або тільки перші дві літери EE.

— Дякую, Ріша, справді корисна штука цей SimpleDateFormat, знатиму.

— Користуйся здоров'ям. І, удачі!