JavaRush /Курсы /Java Collections /Date, SQL date, timestamp

Date, SQL date, timestamp

Java Collections
10 уровень , 9 лекция
Открыта

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

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

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

Комментарии (45)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Denis Odesskiy Уровень 47
29 июня 2025
Date, SQL date, timestamp - Кошка бросила котят, пусть 🔞 нагуглят как хотят😏
SomeBody098 Уровень 51
24 января 2025
Название: Date, SQL date, timestamp Лекция: Calendar и DateFormat Вывод:
Dmitro Уровень 51
1 октября 2024
И в самом деле, где про SQL? Уже попахивает халтурой.
NacWay Уровень 37
30 марта 2023
"Date, SQL date, timestamp" Хорошая статья про SQL
Denis Rogov Уровень 1 Expert
8 февраля 2023

MMM – это трехбуквенное сокращение месяца
MMM - это пирамида
Василий Чи Уровень 51
30 января 2023
Есть ощущение, что

@Deprecated
последние 2 уровня
Anonymous #3091828 Уровень 51
2 декабря 2022
сейчас используется же localdate и localtime, все остальное это же динозавры уже а скоро и вовсе деприкате.
Kotamadeo Уровень 51
19 января 2023
так уже деприкейт хд Надеюсь, в 20 наконец-то удалят )
Denis Odesskiy Уровень 47
1 июля 2025
От того что оно @Deprecated это вовсе не значит, что его удалят. Обратную совместимость никто не отменял. У нас уже есть один условный пайтон (при всем уважении к нему), второго не надо... А то там это была боль, кто в теме поймут, думаю.
Макс Дудин Уровень 41
15 сентября 2022
повторение мать учения.. пусть записывается на подкорку
Aleksandr Уровень 41
2 апреля 2021
еще в самом начале обучения знал что класс устаревший. но приходилось использовать, потому что требования в задачах были именно на этот класс. спасибо что сообщили на последнем уровне.
Уровень 1
26 января 2021
очень актуально в конце всего курса😒
LuneFox Уровень 41 Expert
1 апреля 2022
Программист никогда не заканчивает учиться! Это конец курса, но не конец обучения :)