Конструктор Date

Рейтинг: -2Ответов: 1Опубликовано: 13.07.2023

Есть задание на обучении Java: Напишите программу, которая создает объект Date, устанавливает у него прошедшее время, равным 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000 и 100000000000, и отображает дату и время с помощью метода toString(), соответственно. Тема сейчас про конструкторы. Перед этим заданием был дан материал о конструкторе Date: "Для создания экземпляра текущей даты и времени можно использовать безаргументный конструктор класса Date, для возврата времени в миллисекундах, прошедшего с 1 января 1970 г., - метод getTime(), а для возврата даты и времени в виде строки — метод toString()." "У класса Date есть еще один конструктор Date(long elapseTime), который можно использовать, чтобы создать объект типа Date для заданного времени в миллисекундах, прошедшего с 1 января 1970 г., GMT." Есть подозрения, что для решения задания нужно воспользоваться Date(long elapseTime), но как? Или здесь другое решение? Также обратили внимание, как ранее высчитывалось время с помощью метода System.currentTimeMillis():

public class ShowCurrentTime {
  public static void main(String[] args) {
    final int MILLISECONDS_PER_SECOND = 1000, SECONDS_PER_MINUTE = 60,
      MINUTES_PER_HOUR = 60, HOURS_PER_DAY = 24;

    long totalMilliseconds, totalSeconds, currentSecond,
      totalMinutes, currentMinute, totalHours, currentHour;
    
    // Получить общее кол-во миллисекунд, прошедших с 00:00:00 GMT 01/01/1970
    totalMilliseconds = System.currentTimeMillis();

    // Вычислить общее кол-во секунд, прошедших с 00:00:00 GMT 01/01/1970
    totalSeconds = totalMilliseconds / MILLISECONDS_PER_SECOND;

    // Вычислить текущее кол-во секунд
    currentSecond = totalSeconds % SECONDS_PER_MINUTE;

    // Вычислить общее кол-во минут, прошедших с 00:00:00 GMT 01/01/1970
    totalMinutes = totalSeconds / SECONDS_PER_MINUTE;

    // Вычислить текущее кол-во минут
    currentMinute = totalMinutes % MINUTES_PER_HOUR;

    // Вычислить общее кол-во часов, прошедших с 00:00:00 GMT 01/01/1970
    totalHours = totalMinutes / MINUTES_PER_HOUR;

    // Вычислить текущее кол-во часов по Гринвичу
    currentHour = totalHours % HOURS_PER_DAY;

    // Отобразить текущее время по Гринвичу
    System.out.println("Текущее время равно " + currentHour + ":"
      + currentMinute + ":" + currentSecond + " GMT.");
  }
}

Или тут лучше переписать именно этот код с помощью конструктора Date? Заранее благодарю за разъяснения.

Ответы

▲ 0Принят

У вас есть набор входных значений в миллисекундах (массив или список), вы можете в цикле либо создавать новый экземпляр Date при помощи упомянутого конструктора, либо использовать метод Date::setTime(long timestakmp для одного и того же экземпляра.

long[] arr = {
    10_000L, 100_000L, 1000_000L, 10_000_000L, 100_000_000L,
    1000_000_000L, 10_000_000_000L, 100_000_000_000L
};
// вариант 1
for (long ts : arr) {
    Date d = new Date(ts); // создать новый экземпляр
    System.out.println(d); // toString будет вызван по умолчанию
}
System.out.println("----");
// вариант 2
Date dd = new Date();  // один экземпляр с текущим временем
for (long ts : arr) {
    dd.setTime(ts);         // установить время
    System.out.println(dd); // toString будет вызван по умолчанию
}