- Rukovodstvo
- статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
- Как получить текущую дату и время в Java
- Введение В этой статье мы рассмотрим множество способов получить текущую дату и время в Java. Большинство приложений нуждаются в отметках времени событий или отображении даты / времени, среди многих других вариантов использования: * Когда мы публикуем блоги на веб-сайте, дата публикации записывается в базу данных и отображается читателю. * Когда мы совершаем действие, мы хотели бы знать, когда оно будет доступно, чтобы мы могли отслеживать их. * Когда мы покупаем что-то в Интернете или совершаем транзакцию, наш ba
- Вступление
- System.currentTimeMillis ()
- java.util.Date
- API календаря
- API даты / времени
- LocalDate
- Местное время
- LocalDateTime
- ZonedDateTime
- Часы
- Джода-Тайм
- Заключение
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Как получить текущую дату и время в Java
Введение В этой статье мы рассмотрим множество способов получить текущую дату и время в Java. Большинство приложений нуждаются в отметках времени событий или отображении даты / времени, среди многих других вариантов использования: * Когда мы публикуем блоги на веб-сайте, дата публикации записывается в базу данных и отображается читателю. * Когда мы совершаем действие, мы хотели бы знать, когда оно будет доступно, чтобы мы могли отслеживать их. * Когда мы покупаем что-то в Интернете или совершаем транзакцию, наш ba
Вступление
В этой статье мы рассмотрим множество способов получить текущую дату и время в Java . Большинство приложений нуждаются в отметках времени событий или отображении даты / времени, среди многих других вариантов использования:
- Когда мы публикуем блоги на веб-сайте, дата публикации записывается в базу данных и отображается читателю.
- Когда мы совершаем действие, мы хотели бы знать, когда оно будет доступно, чтобы мы могли отслеживать их.
- Когда мы покупаем что-то в Интернете или совершаем транзакцию, наши банки предлагают нам список транзакций с точными отметками времени, чтобы мы могли их просмотреть.
Короче говоря, получение текущей даты и времени в Java очень важно и имеет множество применений, и, к счастью, это действительно легко получить для любого использования.
System.currentTimeMillis ()
Если вы хотите получить одно числовое значение миллисекунд, прошедших с эпохи UNIX , это так же просто, как:
Распечатка этого значения приведет к примерно следующему:
При преобразовании этого числа обратно в удобочитаемую дату оно представляет:
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));
Выполнение этого фрагмента кода даст:
Примечание: имейте в виду, что этот метод возвращает текущее значение в зависимости от вашего системного времени.
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));
И запуск этого фрагмента кода даст:
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 для его форматирования.
Выполнение этого фрагмента кода даст:
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));
Выполнение этого фрагмента кода даст:
Вы также можете передать 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));
Выполнение этого фрагмента кода даст:
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));
Выполнение этого фрагмента кода даст:
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));
Выполнение этого фрагмента кода даст:
Часы
Другой класс, представленный нам в 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);
Выполнение этого кода даст:
Вы можете создать зонированные Clock , передав ZoneId в Clock.system() :
Clock clock = Clock.system(ZoneId.of("Europe/Paris"));
Печать значения Instant принадлежащего clock , даст:
И, наконец, используя 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:
Работа с 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));
Выполнение этого фрагмента кода даст:
Заключение
Во многих случаях кому-то может понадобиться получить текущую дату и / или время в Java, и мы рассмотрели все подходы, которые существуют на данный момент для этого, включая более старые классы — java.util.Date и java.util.Calendar а также новые java.time которые появились с новым API даты / времени.
Кроме того, мы рассмотрели Joda-Time и его подход к получению текущей даты и времени.
Если вы хотите прочитать о преобразовании строки в дату в Java , у нас это есть!
Licensed under CC BY-NC-SA 4.0