JavaRush /Курсы /Java Syntax /Знакомимся с классом Date

Знакомимся с классом Date

Java Syntax
8 уровень , 4 лекция
Открыта
Знакомимся с типом Date - 1

— Привет, Амиго. Хочу рассказать тебе про интересный класс – Date. С помощью этого класса можно хранить дату и время, а также измерять временные промежутки.

— Уже интересно. Продолжай.

— Каждый объект типа Date хранит внутри себя время. А время хранится в очень интересном виде – количество миллисекунд, которые прошли с 1 января 1970 года, по Гринвичу.

— Ничего себе!

— Ага. Это число настолько большое, что не влезает в int, приходится хранить его в long. Зато очень удобно считать разницу между двумя датами: отнял два числа и уже известна разница с точностью до миллисекунд. И к тому же устраняется проблема смены дат и перевода часов.

— А что самое интересное, каждый объект при создании инициализируется текущим временем. Чтобы узнать текущее время – достаточно просто создать объект.

— А как с ним работать?

— Вот тебе несколько примеров:

Получение текущей даты:
public static void main(String[] args) throws Exception
{
    Date today = new Date();
    System.out.println("Current date: " + today);
}
Вычисление разницы между двумя датами:
public static void main(String[] args) throws Exception
{
    Date currentTime = new Date();           //получаем текущую дату и время
    Thread.sleep(3000);                      //ждём 3 секунды – 3000 миллисекунд
    Date newTime = new Date();               //получаем новое текущее время
        
    long msDelay = newTime.getTime() - currentTime.getTime(); //вычисляем разницу
    System.out.println("Time distance is: " + msDelay + " in ms");
}
Наступило ли уже некоторое время:
public static void main(String[] args) throws Exception
{
    Date startTime = new Date();

    long endTime = startTime.getTime() + 5000;   //    +5 секунд
    Date endDate = new Date(endTime);

    Thread.sleep(3000);              // ждем 3 секунды 

    Date currentTime = new Date();
    if(currentTime.after(endDate))//проверяем что время currentTime после endDate
    {
        System.out.println("End time!");
    }
}
Сколько прошло времени с начала сегодняшнего дня:
public static void main(String[] args) throws Exception
{
    Date currentTime = new Date();
    int hours = currentTime.getHours();
    int mins = currentTime.getMinutes();
    int secs = currentTime.getSeconds();

    System.out.println("Time from midnight " + hours + ":" + mins + ":" + secs);
}
Сколько дней прошло с начала года:
public static void main(String[] args) throws Exception
{
    Date yearStartTime = new Date();
    yearStartTime.setHours(0);
    yearStartTime.setMinutes(0);
    yearStartTime.setSeconds(0);

    yearStartTime.setDate(1);      // первое число
    yearStartTime.setMonth(0);     // месяц январь, нумерация для месяцев 0-11

    Date currentTime = new Date();
    long msTimeDistance = currentTime.getTime() - yearStartTime.getTime();
    long msDay = 24 * 60 * 60 * 1000;  //сколько миллисекунд в одних сутках
        
    int dayCount = (int) (msTimeDistance/msDay); //количество целых дней
    System.out.println("Days from start of year: " + dayCount);
}
8
Задача
Java Syntax Pro, 8 уровень, 4 лекция
Недоступна
Первые объекты
Используя оператор new в методе main(), создай: - 10 объектов типа String; - 5 объектов типа int[] (массивов значений int); - 2 объекта типа Scanner.

— Метод getTime() возвращает количество миллисекунд, которое хранится в объекте Date.

— Метод after() проверяет, что дата, у которой мы вызвали метод, идет после переданной в метод даты after.

— Методы getHours(), getMinutes(), getSeconds() возвращают количество часов, минут и секунд у объекта, у которого их вызвали.

— Более того, в последнем примере ты видишь, что можно повлиять на дату/время, сохраненное в объекте Date. Мы получаем текущее время и дату, а затем сбрасываем часы, минуты и секунды в 0. Так же устанавливаем месяц в Январь, а день месяца в 1. Теперь объект yearStartTime хранит дату и время 1 января текущего года 0 часов 0 минут 0 секунд.

— Потом мы снова получаем текущую дату currentTime, и вычисляем разницу в миллисекундах между двумя датами. Я про msTimeDistance.

— Затем делим msTimeDistance на количество миллисекунд в сутках и получаем полное количество дней, прошедшее с начала года до сегодняшнего дня!

— Вау! Вот это круто!

Комментарии (320)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Василий Уровень 16
10 декабря 2023
java.util.Date в 2023? Надеюсь следующей темой будет LocalDate
Увайс Уровень 41
5 июля 2023
В IDEA никакой из этих кодов не работает, он не понимает Date что такое? Высвечивает красным просто
Marina_Zu Уровень 2
22 августа 2023
Надо импортировать класс Date import java.util.Date;
Увайс Уровень 41
27 августа 2023
👍👍👍
Skifan Уровень 13
6 апреля 2023
yearStartTime.setDate(1); // первое число yearStartTime.setMonth(0); // месяц январь, нумерация для месяцев 0-11 а вот нельзя было месяц так же с 1 сделать ? ))
Rolik Уровень 41
20 марта 2023
Date устаревший (deprecated) класс с устаревшими функциями. Вместо него следует использовать класс Calendar.
Perl Developer Уровень 1
12 февраля 2023
Что за привычка у этих землян не озвучивать как импортировать классы? К примеру, для Date это java.util :

import java.util.Date;
Qunjavi Уровень 10
5 августа 2022
"— Вау! Вот это круто!" Еще круче, что эта статья очевидно устарела судя по комментам внизу. На 10 уровне, 9 лекция: "— Я вспомнил, что хотел рассказать тебе немного про работу с датами. — Так вы мне уже рассказывали, что в Java существует класс Date, с помощью которого можно работать с датой. — Гм. Ну, с некоторого времени класс Date устарел. Сейчас вместо него советуют использовать класс Calendar, у которого есть метод getTime(), который и возвращает текущую ..." Свежие лекции про дату и время: "Создателям Java не сильно нравилась текущая ситуация с классами Date и Calendar. Они были хороши в свое время, но времена меняются. И нужно было что-то простое, мощное и надежное. И вот вместе с выходом Java8 (15 лет спустя после выхода Calendar) был представлен Java Date Time API"
Aлександр 52 Уровень 21
17 ноября 2022
Ну слушай, нам в школе тоже в первом классе говорили, что отрицательных чисел нет, а до последнего класса, что в квадратном корне отрицательных чисел быть не может. По факту здесь получается итерационное усложнение, так часто бывает в педагогике.
Евгений Балакин Уровень 11 Expert
2 ноября 2023
А ещё многие до сих пор верят, что на 0 делить нельзя..
Ravelena Уровень 32
11 мая 2022
все супер, но почему первое число месяца не setDate(0), а setDate(1)?
Pavel R Уровень 28
2 июня 2022
вы не верно ставите вопрос - почему setMonth(0) первый, ведь начальная дата 00:00:00 1.01.XXXX - из всех параметров выбивается "месяц" начинающийся с 0.
DimanchikS Уровень 22
22 января 2022
Date уже не очень свеж и был не очень хорошо разработан. Вместо него для новых программ рекомендуется использовать LocalDate.
Alexander Minaev Уровень 27
5 февраля 2022
но не стоит думать, что Date совсем не нужен. Все зависит от работы, для поддержки какого то долгосрочного продукта, ну, который был давно создан, нужно знать именно Date, потому что он на нем и написан и врятли его будут переписывать из за того, что он плохой, а для новых проектов лучше использовать LocalDate или какой нить другой
Viktoria Konstantinova Уровень 9
30 ноября 2021
Говорят, в 2018 году задачи были сложнее, чем в 2021. Время не конвертируем, длину окружности не вычисляем....верните сложные задачи!!))
Anonymous #1396846 Уровень 41
19 января 2022
И доллар по 30 тоже верните пожалуйста! Ну вдруг...
Григорий Уровень 4
13 мая 2022
чел, попроси, пожалуйста, мне еще частный дом в этом году
Кирилл Уровень 15
25 ноября 2021
"- Вау! Вот это круто!" Камон, вы серьезно?) Написать 10-13 строк кода чтобы получить кол-во дней с начала года - это круто?))