— Я вспомнил, что хотел рассказать тебе немного про работу с датами.

— Так вы мне уже рассказывали, что в 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 = new 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, буду знать.

— Пользуйся на здоровье. И, удачи!