Как получить текущую дату и время в Java

Введение В этой статье мы рассмотрим множество способов получить текущую дату и время в Java. Большинство приложений нуждаются в отметках времени событий или отображении даты / времени, среди многих других вариантов использования: * Когда мы публикуем блоги на веб-сайте, дата публикации записывается в базу данных и отображается читателю. * Когда мы совершаем действие, мы хотели бы знать, когда оно будет доступно, чтобы мы могли отслеживать их. * Когда мы покупаем что-то в Интернете или совершаем транзакцию, наш ba

Вступление

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

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

Короче говоря, получение текущей даты и времени в Java очень важно и имеет множество применений, и, к счастью, это действительно легко получить для любого использования.

System.currentTimeMillis ()

Если вы хотите получить одно числовое значение миллисекунд, прошедших с эпохи UNIX , это так же просто, как:

 System.currentTimeMillis(); 

Распечатка этого значения приведет к примерно следующему:

 1580897313933 

При преобразовании этого числа обратно в удобочитаемую дату оно представляет:

 Wednesday, 5 February 2020 10:08:33.933 

А чтобы сделать это на Java, нам понадобится всего пара строк кода:

 SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); 
 Date date = new Date(System.currentTimeMillis()); 
 System.out.println(formatter.format(date)); 

Выполнение этого фрагмента кода даст:

 2020-02-05 at 10:11:33 UTC 

Примечание: имейте в виду, что этот метод возвращает текущее значение в зависимости от вашего системного времени.

java.util.Date

В Java получить текущую дату так же просто, как создать экземпляр Date из пакета Java java.util :

 Date date = new Date(); // This object contains the current date value 

Мы можем легко отформатировать эту дату:

 SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
 System.out.println(formatter.format(date)); 

И запуск этого фрагмента кода даст:

 05-02-2020 10:12:46 

API календаря

Среди множества классов Java есть Calendar , который используется для преобразования даты и времени между конкретными моментами и полями календаря.

Получить текущую дату и время очень просто с помощью календаря:

 Calendar calendar = Calendar.getInstance(); // Returns instance with current date and time set 

Опять же, мы можем легко отформатировать это:

 SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
 System.out.println(formatter.format(calendar.getTime())); 

Метод getTime() возвращает объект Date Поскольку SimpleDateFormat работает только с Date , мы вызываем метод getTime() Calendar для его форматирования.

Выполнение этого фрагмента кода даст:

 25-11-2018 00:43:39 

API даты / времени

Java 8 познакомила нас с совершенно новым API, который был включен в сборку для замены java.util.Date и java.util.Calendar .

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

API даты / времени предоставляет несколько классов, на которые мы можем положиться при выполнении работы:

LocalDate

LocalDate представляет собой просто дату без времени. Это означает, что мы можем получить только текущую дату, но без времени суток:

 LocalDate date = LocalDate.now(); // Gets the current date 

На этот раз вместо инициализации нового объекта мы вызываем статический метод now() который возвращает текущую дату в соответствии с системными часами с часовым поясом по умолчанию.

Мы можем отформатировать этот объект:

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); 
 System.out.println(date.format(formatter)); 

Выполнение этого фрагмента кода даст:

 05-02-2020 

Вы также можете передать ZoneId методу для получения даты на основе указанного часового пояса, а не по умолчанию:

 LocalDate date = LocalDate.now(ZoneId.of("Europe/Paris")); // Gets current date in Paris 

Вы можете получить список всех доступных идентификаторов часовых поясов через:

 System.out.println(ZoneId.getAvailableZoneIds()); 

Местное время

LocalTime является противоположностью LocalDate , поскольку представляет только время без даты. Это означает, что мы можем получить только текущее время дня без фактической даты:

 LocalTime time = LocalTime.now(); // Gets the current time 

Мы можем легко отформатировать этот объект:

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); 
 System.out.println(time.format(formatter)); 

Выполнение этого фрагмента кода даст:

 00:55:58 

LocalDateTime

И, наконец, LocalDateTime , наиболее часто используемый класс Date / Time в Java, представляет собой комбинацию двух предыдущих - хранит значение как даты, так и времени:

 LocalDateTime dateTime = LocalDateTime.now(); // Gets the current date and time 

Мы можем легко отформатировать этот объект:

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"); 
 System.out.println(dateTime.format(formatter)); 

Выполнение этого фрагмента кода даст:

 05-02-2020 10:31:42 

ZonedDateTime

Наряду с предыдущими классами ZonedDateTime также предлагает эту функциональность:

 ZonedDateTime dateTime = ZonedDateTime.now(); // Gets the current date and time, with your default time-zone 

Мы можем легко отформатировать этот объект:

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"); 
 System.out.println(dateTime.format(formatter)); 

Выполнение этого фрагмента кода даст:

 05-02-2020 10:32:26 

Часы

Другой класс, представленный нам в Java 8 Date / Time API, - это класс Clock Он обеспечивает доступ к текущему Instant , LocalDate , LocalTime и LocalDateTime с использованием часового пояса.

При этом, используя Clock , вы практически создаете экземпляры всех из них и можете получить доступ к тем, которые вам интересны.

 // Clock with the system's default timezone 
 Clock clock = Clock.systemDefaultZone(); 
 
 // Clock with the UTC timezone 
 Clock clock = Clock.systemUTC(); 

С помощью этого экземпляра объекта мы можем создать экземпляры многих из ранее упомянутых классов:

 // Each of these obtain the current instance of that class from the clock 
 LocalDateTime localDateTime = LocalDateTime.now(clock); 
 LocalTime localTime = LocalTime.now(clock); 
 LocalDate localDate = LocalDate.now(clock); 
 Instant instant = Instant.now(clock); 
 ZonedDateTime zonedDateTime.now(clock); 

Примечание: уместно спросить, почему мы использовали Clock вместо того, чтобы просто оставить метод now() пустым. Clock является обязательным, и метод now() обычно использует системные часы для определения значений. Хотя с помощью часов вы можете иметь больше, чем просто часы вашей системы, если хотите. Однако в нашем примере это не имеет значения.

Используя clock , мы можем извлечь Instant :

 Instant instant = clock.instant(); 
 System.out.println(instant); 

Выполнение этого кода даст:

 2020-04-16T17:05:43.867063Z 

Вы можете создать зонированные Clock , передав ZoneId в Clock.system() :

 Clock clock = Clock.system(ZoneId.of("Europe/Paris")); 

Печать значения Instant принадлежащего clock , даст:

 2020-04-16T17:08:16.139183Z 

И, наконец, используя Clock помощью millis() , вы можете получить доступ к миллисекундному значению часов, которое совпадает с System.currentTimeMillis() :

 System.out.println(clock.millis()); 
 System.out.println(System.currentTimeMillis()); 

Оба они распечатают:

 1587057153329 
 1587057153329 

Джода-Тайм

Joda-Time - это инструмент, который изначально был разработан для решения проблем со старыми классами времени и даты Java.

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

Опять же, если ваш проект не обновлен до Java 8, Joda-Time по-прежнему является отличным инструментом для использования в качестве альтернативы.

Чтобы использовать его в своем проекте, проще всего просто добавить зависимость Maven:

 <dependency> 
 <groupId>joda-time</groupId> 
 <artifactId>joda-time</artifactId> 
 <version>${version}</version> 
 </dependency> 

Работа с Joda-Time очень похожа на работу с Java Date / Time API:

 DateTime dateTime = new DateTime(); // Initializes with the current date and time 

Примечание. При первой инициализации DateTime Joda-Time возникают известные проблемы с производительностью из-за загрузки дескрипторов хронологии .

Этот объект легко отформатировать:

 DateTimeFormatter formatter = DateTimeFormatter.forPattern("dd-MM-yyyy HH:mm:ss"); 
 System.out.println(fmt.print(dateTime)); 

Выполнение этого фрагмента кода даст:

 05-02-2020 10:33:05 

Заключение

Во многих случаях кому-то может понадобиться получить текущую дату и / или время в Java, и мы рассмотрели все подходы, которые существуют на данный момент для этого, включая более старые классы - java.util.Date и java.util.Calendar а также новые java.time которые появились с новым API даты / времени.

Кроме того, мы рассмотрели Joda-Time и его подход к получению текущей даты и времени.

Если вы хотите прочитать о преобразовании строки в дату в Java , у нас это есть!

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus