Рубрики
Без рубрики

Получить текущую дату до Java 8

Узнайте, как получить текущую дату в Java, используя несколько методов до Java 8.

Автор оригинала: baeldung.

1. введение

В устаревших системах нам может потребоваться работать с датами, когда ни новый API даты и времени, ни настоятельно рекомендуемая библиотека времени Joda недоступны.

В этом коротком уроке мы рассмотрим несколько подходов, чтобы увидеть как получить текущую дату в системах до Java 8 .

2. Системное время

Когда все, что нам нужно, – это одно числовое значение, представляющее текущую дату и время, мы можем использовать системное время. Чтобы получить количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 GMT , мы можем использовать метод currentTimeMillis , который возвращает long :

long elapsedMilliseconds = System.currentTimeMillis();

Когда мы хотим измерить прошедшее время с большей точностью, мы можем использовать метод nanoTime . Это вернет значение наносекунд, прошедших с фиксированного, но произвольного момента.

Это произвольное время одинаково для всех вызовов внутри JVM, поэтому возвращаемое значение полезно только для вычисления разницы в прошедших наносекундах между несколькими вызовами nanoTime :

long elapsedNanosecondsStart = System.nanoTime();
long elapsedNanoseconds = System.nanoTime() - elapsedNanosecondsStart;

3. Пакет java.util

Используя классы из пакета java.util , мы можем представить момент времени, обычно в миллисекундах, прошедших с 1 января 1970 года 00:00:00 GMT .

3.1. java.util.Date

Мы можем представить конкретную дату и время с помощью объекта Date . Это содержит точность в миллисекундах и информацию о часовом поясе .

Хотя существует множество доступных конструкторов, самый простой способ создать объект Date , представляющий текущую дату в локальном часовом поясе, – это использовать базовый конструктор:

Date currentUtilDate = new Date();

Теперь давайте создадим объект Date для определенной даты и времени. Мы могли бы использовать вышеупомянутые конструкторы и просто передать значение миллисекунды.

В качестве альтернативы мы можем использовать класс SimpleDateFormat для преобразования строки значения в фактический Дата объект:

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
Date customUtilDate = dateFormatter.parse("30-01-2020 10:11:12");

Мы можем использовать широкий спектр шаблонов данных в соответствии с вашими потребностями.

3.2. java.util.Календарь

Объект Calendar может делать то, что делает Date , и это лучше для арифметических вычислений даты, поскольку он также может принимать Locale . Мы можем указать Locale как географический, политический или культурный регион.

Чтобы получить текущую дату без указания часового пояса или Локали , мы можем использовать метод getInstance :

Calendar currentUtilCalendar = Calendar.getInstance();

А для преобразования Calendar to Date мы можем просто использовать метод getTime :

Date currentDate = Calendar.getInstance().getTime();

Забавно, что класс GregorianCalendar является реализацией наиболее часто используемого календаря в мире.

4. Пакет java.sql

Далее мы рассмотрим три расширения java.util.Класс Date , представляющий эквивалентные объекты SQL.

4.1. java.sql.Дата

С помощью объекта java.sql.Date у нас нет доступа к информации о часовом поясе, и точность усекается на уровне дня . Для представления сегодняшнего дня мы можем использовать конструктор, который занимает длинное представление миллисекунд:

Date currentSqlDate = new Date(System.currentTimeMillis());

Как и прежде, для определенной даты мы можем использовать класс SimpleDateFormat для преобразования в java.util.Сначала установите дату , а затем получите миллисекунды, используя метод getTime . Затем мы можем передать это значение в конструктор java.sql.Date .

Мы можем просто использовать метод valueOf , когда String представление Даты соответствует шаблону yyyy-[m]m-[d]d :

Date customSqlDate = Date.valueOf("2020-01-30");

4.2. java.sql.Time

Объект java.sql.Time предлагает доступ к информации о часах, минутах и секундах — опять же, без доступа к часовому поясу. Давайте получим текущее Время , используя представление в миллисекундах:

Time currentSqlTime = new Time(System.currentTimeMillis());

Чтобы указать время с помощью метода valueOf , мы можем передать значение, соответствующее шаблону hh:mm:ss :

Time customSqlTime = Time.valueOf("10:11:12");

4.3. java.sql.Метка времени

В этом последнем разделе мы объединим информацию SQL Date и Time , используя класс Timestamp . Это позволяет нам иметь точность до наносекунд .

Давайте создадим Метка времени объект, еще раз передав конструктору значение long для текущего количества миллисекунд:

Timestamp currentSqlTimestamp = new Timestamp(System.currentTimeMillis());

Наконец, давайте создадим новую пользовательскую метку Времени , используя значение метода с требуемым yyyy-[m]m-[d]d hh:mm:ss[.f…] шаблоном:

Timestamp customSqlTimestamp = Timestamp.valueOf("2020-1-30 10:11:12.123456789");

5. Заключение

В этом коротком уроке мы рассмотрели, как получить текущую дату и дату для данного момента без использования Java 8 или каких-либо внешних библиотек.

Как всегда, код статьи доступен на GitHub .