undefined

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, буду знать.

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

Комментарии (28)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Aleksandr 41 уровень
2 апреля 2021
еще в самом начале обучения знал что класс устаревший. но приходилось использовать, потому что требования в задачах были именно на этот класс. спасибо что сообщили на последнем уровне.
Артур Харатян 41 уровень, Санкт-Петербург
26 января 2021
очень актуально в конце всего курса😒
максим 40 уровень, Екатеринбург
7 ноября 2020
Serj 41 уровень, Орел
29 октября 2020
Date значит устарел, советуют использовать Calendar. Вроде как и он устарел и уже все юзают LocalDateTime, не?
Хорс 41 уровень, Харьков
18 октября 2020
SQL date, timestamp а вот это вот всё ?
Zaakki 41 уровень, Москва
19 августа 2020
нет, ну чего вы начинаете, нормальная лекция полезнее за весь курс только про дебаг на 39м.
Владислав 41 уровень, Санкт-Петербург
8 августа 2020
Лекция-то великолепная и на голову выше аналогов, которые я находил в интернете уровней 20-30 назад. Ее бы пораньше, конечно, и я бы только ей и пользовался при создании объекта SimpleDateFormat.
Евгений 41 уровень, Нижний Новгород Expert
4 августа 2020
Ну, Амиго подкачал. Я-то вот помню, что это за SimpleDateFormat, да и почти каждый, пожалуй, его уже выучил) Но повторение - хорошо.
Den_lx 41 уровень, Гродно
3 июля 2020
Вовремя))) Где ж эта тема была уровней 20-30 назад)