Как получить текущую дату в java
Перейти к содержимому

Как получить текущую дату в java

  • автор:

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

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

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

Время чтения: 6 мин.

Вступление

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

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

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

System.currentTimeMillis ()

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

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

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

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

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

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

java.util.Date

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

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

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

API календаря

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

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

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

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

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

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

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

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

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

LocalDate

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

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

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

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

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

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

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

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

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

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

LocalDateTime

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

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

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

ZonedDateTime

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

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

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

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

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

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

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

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

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

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

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

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

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

Джода-Тайм

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

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

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

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

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

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

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

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

Заключение

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

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

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

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

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

1. Использование объекта даты

Простое решение состоит в том, чтобы построить Date объект без каких-либо аргументов, который инициализируется текущей датой и временем с точностью до миллисекунды.

Чтобы получить Date экземпляр из Instant объект, сделайте так:

Чтобы получить текущую дату и время в указанном формате, вы можете использовать SimpleDateFormat учебный класс. Он позволяет форматировать и анализировать даты с помощью пользовательских шаблонов для форматирования даты и времени.

The java.util.Calendar class также можно использовать для получения текущей даты и времени. Этот класс следует избегать, когда информация о дате и времени является конфиденциальной.

2. Время Джода

Стандартные классы даты и времени до Java SE 8 плохо спроектированы и содержат несколько недостатков. Joda-Time библиотека date-time обеспечивает высококачественную замену до Java SE 8. Чтобы получить полную дату и время с часовым поясом, вы можете использовать DateTime учебный класс.

Класс Joda-Time также поддерживает функциональность часового пояса через DateTimeZone учебный класс.

Java Date Time API

Java 8 introduces new Date Time API that is easier to used than the traditional java.util.Date class.

LocalDate

java.time.LocalDate stores a date only such as 2022-01-01. No time info is stored.

Create LocalDate

Use static method now(), of() and parse() to create a date.

static method now() — Obtains the current date from the system clock in the default time-zone. Internally calls LocalDate.now(Clock.systemDefaultZone()) .

You can provide a ZoneId to get current date from a specific time-zone.

Obtains an instance of LocalDate from a year, month and day.

Obtain a LocalDate by parsing. You can specify a DateTimeFormatter if input is in in DateTimeFormatter.ISO_LOCAL_DATE format.
parse method throws DateTimeParseException if the text cannot be parsed

Accessing fields

There are many getter methods to get individual fields

  • getYear()
  • getMonth()
  • getDayOfYear()
  • getDayOfMonth()
  • getDayOfWeek()
  • getLong(TemporalField field)

Calculation methods

Use the following methods to calculate dates. All of these return a copy of LocalDate.

  • plus(long amountToAdd, TemporalUnit unit)
  • plus(TemporalAmount amountToAdd)
  • plusDays(long)
  • plusWeeks(long)
  • plusMonths(long)
  • plusYears(long)
  • minus(long amountToSubtract, TemporalUnit unit)
  • minus(TemporalAmount amountToSubtract)
  • minusDays(long)
  • minusWeeks(long)
  • minusMonths(long)
  • minusYears(long)

Formatting

LocalDate.toString method outputs the date in ISO-8601 format uuuu-MM-dd. If you need a specific format, use format method and pass a java.time.format.DateTimeFormatter instance.

Other methods

Methods to compare other date

  • int compareTo(ChronoLocalDate other)
  • boolean isAfter(ChronoLocalDate other)
  • boolean isBefore(ChronoLocalDate other)
  • boolean isEqual(ChronoLocalDate other)

Convert to LocalDate

  • atStartOfDay() — Combines this date with the time of midnight to create a LocalDateTime at the start of this date.
  • atTime(int hour, int minute) — Combines this date with a time to create a LocalDateTime.
  • atTime(int hour, int minute, int second) — Combines this date with a time to create a LocalDateTime.
  • atTime(int hour, int minute, int second, int nanoOfSecond) — Combines this date with a time to create a LocalDateTime.
  • atTime(LocalTime time) — Combines this date with a time to create a LocalDateTime.

Convert to ZonedDateTime

  • ZonedDateTime atStartOfDay(ZoneId zone) — Returns a zoned date-time from this date at the earliest valid time according to the rules in the time-zone.

convert to java.util.Date

convert to java.util.Date. First to Instant first, then use Date.from method to create a Date.

LocalTime

java.time.LocalTime stores a time only. No date is stored in LocalTime.

LocalTime is an immutable date-time object that represents a time, often viewed as hour-minute-second. Time is represented to nanosecond precision. For example, the value “13:45.30.123456789” can be stored in a LocalTime.

Constants

Create LocalTime

use static method now() to osbtains the current time from the system clock in the default time-zone.

You can provide a ZoneId to get current time for a time zone.

Use of method to create LocalTime

Parse from a String

Accessing fields

  • getHour()
  • getMinute()
  • getSecond()
  • getNano()
  • getLong(TemporalField field)

Calculation methods

  • plus(long amountToAdd, TemporalUnit unit)
  • plus(TemporalAmount amountToAdd)
  • plusHours()
  • plusMinutes()
  • plusNanos()
  • plusSeconds()
  • minus(long amountToAdd, TemporalUnit unit)
  • minus(TemporalAmount amountToAdd)
  • minusHours()
  • minusMinutes()
  • minusNanos()
  • minusSeconds()

Formatting

Other methods

truncatedTo(TemporalUnit unit) — Returns a copy of this LocalTime with the time truncated.

LocalDateTime atDate(LocalDate date) — Combines this time with a date to create a LocalDateTime.

LocalDateTime

java.time.LocalDateTime — A date-time without a time-zone in the ISO-8601 calendar system, such as 2007-12-03T10:15:30.

Create LocalDateTime

use now() to get the current local date time. Provide a ZoneId to get the local time of a specific timezone.

Use of() method to construct a local date time

parse from a String

Convert an Instant to LocalDateTime

Accessing Fields

  • getYear()
  • getMonth()
  • getDayOfYear()
  • getDayOfMonth()
  • getDayOfWeek()
  • getHour()
  • getMinute()
  • getSecond()
  • getNano()
  • getLong(TemporalField field)

Calculation

  • plus(long amountToAdd, TemporalUnit unit)
  • plus(TemporalAmount amountToAdd)
  • plusDays(long)
  • plusWeeks(long)
  • plusMonths(long)
  • plusYears(long)
  • plusHours()
  • plusMinutes()
  • plusNanos()
  • plusSeconds()
  • minus(long amountToAdd, TemporalUnit unit)
  • minus(TemporalAmount amountToAdd)
  • minusDays(long)
  • minusWeeks(long)
  • minusMonths(long)
  • minusYears(long)
  • minusHours()
  • minusMinutes()
  • minusNanos()
  • minusSeconds()

Formatting

Other methods

toLocalDate() — gets the local date part

toLocalTime() — gets the local time part

atZone(ZoneId zone) — Combines this date-time with a time-zone to create a ZonedDateTime.

ZonedDateTime

java.time.ZonedDateTime — datetime with ZoneId. represent an instant in a Timezone.

Create a ZonedDateTime

create a ZonedDateTime using now() method. Returns the current date-time using the system clock in the default time-zone.

create a ZonedDateTime using now(ZoneId zone) method.

create ZonedDateTime from a LocalDateTime and a ZoneId.

create ZonedDateTime from a LocalDate, LocalTime and a ZoneId

create an instance of ZonedDateTime from a year, month, day, hour, minute, second, nanosecond and time-zone.

create an instance of ZonedDateTime from an Instant.

create ZonedDateTime by parsing String

Accessing Fields

  • getYear()
  • getMonth()
  • getDayOfYear()
  • getDayOfMonth()
  • getDayOfWeek()
  • getHour()
  • getMinute()
  • getSecond()
  • getNano()
  • getLong(TemporalField field)

ZonedDateTime has getZone() method to return ZoneId value and getOffset() method to get ZoneOffset.

Calculation

  • plus(long amountToAdd, TemporalUnit unit)
  • plus(TemporalAmount amountToAdd)
  • plusDays(long)
  • plusWeeks(long)
  • plusMonths(long)
  • plusYears(long)
  • plusHours()
  • plusMinutes()
  • plusNanos()
  • plusSeconds()
  • minus(long amountToAdd, TemporalUnit unit)
  • minus(TemporalAmount amountToAdd)
  • minusDays(long)
  • minusWeeks(long)
  • minusMonths(long)
  • minusYears(long)
  • minusHours()
  • minusMinutes()
  • minusNanos()
  • minusSeconds()

Formatter

Convert to Different Zone

withZoneSameInstant = used to convert between differnet timezone

Convert to java.util.Date

Other methods

  • toLocalDate — gets the LocalDate part of ZonedDateTime
  • toLocalTime — gets the LocalTime part of ZonedDateTime
  • toLocalDateTime — gets the LocalDateTime part of ZonedDateTime

OffsetDateTime

OffsetDateTime — contains date-time and an offset such as 2022-01-01T03:00:00-05:00.

Difference bewteen OffsetDateTime, ZonedDateTime and Instant — see Javadoc

“OffsetDateTime, ZonedDateTime and Instant all store an instant on the time-line to nanosecond precision. Instant is the simplest, simply representing the instant. OffsetDateTime adds to the instant the offset from UTC/Greenwich, which allows the local date-time to be obtained. ZonedDateTime adds full time-zone rules.”

Create OffsetDateTime

create an OffsetDateTime using now() method:

create OffsetDateTime from a LocalDateTime and a ZoneOffset.

create OffsetDateTime from a LocalDate, LocalTime and a ZoneOffset

create an instance of OffsetDateTime from a year, month, day, hour, minute, second, nanosecond and ZoneOffset.

create an instance of OffsetDateTime from an Instant.

create OffsetDateTime by parsing String

Accessing Fields

  • getYear()
  • getMonth()
  • getDayOfYear()
  • getDayOfMonth()
  • getDayOfWeek()
  • getHour()
  • getMinute()
  • getSecond()
  • getNano()
  • getLong(TemporalField field)

OffsetDateTime has getOffset() method to return ZoneOffset

methods to get part of an OffsetDateTime

  • toLocalDate()
  • toLocalDateTime()
  • toLocalTime()
  • toOffsetTime()

Calculation

  • plus(long amountToAdd, TemporalUnit unit)
  • plus(TemporalAmount amountToAdd)
  • plusDays(long)
  • plusWeeks(long)
  • plusMonths(long)
  • plusYears(long)
  • plusHours()
  • plusMinutes()
  • plusNanos()
  • plusSeconds()
  • minus(long amountToAdd, TemporalUnit unit)
  • minus(TemporalAmount amountToAdd)
  • minusDays(long)
  • minusWeeks(long)
  • minusMonths(long)
  • minusYears(long)
  • minusHours()
  • minusMinutes()
  • minusNanos()
  • minusSeconds()

Formatter

Other methods

atZoneSameInstant(ZoneId zone) — convert to ZonedDateTime by providing a ZoneId

toInstant() — convert to Instant

toEpochSecond() — get number of seconds since the epoch of 1970-01-01T00:00:00Z.

Convert to java.util.Date

Instant

java.time.Instant — An instantaneous point on the time-line.

This class models a single instantaneous point on the time-line. This might be used to record event time-stamps in the application.

The range of an instant requires the storage of a number larger than a long. To achieve this, the class stores a long representing epoch-seconds and an int representing nanosecond-of-second, which will always be between 0 and 999,999,999. The epoch-seconds are measured from the standard Java epoch of 1970-01-01T00:00:00Z where instants after the epoch have positive values, and earlier instants have negative values. For both the epoch-second and nanosecond parts, a larger value is always later on the time-line than a smaller value.

Create an Instant

now() — create Instant from current epoch time.

ofEpochMilli(long epochMilli) — create Instant using milliseconds from the epoch of 1970-01-01T00:00:00Z.

ofEpochSecond(long epochSecond) — create Instant using seconds from the epoch of 1970-01-01T00:00:00Z.

parse() — parse an Instant from epoch time, such as “2022-06-01T00:00:00.00Z”.

Calculation

  • plus(long amountToAdd, TemporalUnit unit)
  • plus(TemporalAmount amountToAdd)
  • plusMillis(long millisToAdd)
  • plusNanos(long nanosToAdd)
  • plusSeconds(long secondsToAdd)
  • minus(long amountToSubtract, TemporalUnit unit)
  • minus(TemporalAmount amountToSubtract)
  • minusMillis(long millisToSubtract)
  • minusNanos(long nanosToSubtract)
  • minusSeconds(long secondsToSubtract)

Other methods

getEpochSecond() — Gets the number of seconds from the Java epoch of 1970-01-01T00:00:00Z.

toEpochMilli() — returns a long representing the number of milliseconds from the epoch of 1970-01-01T00:00:00Z.

getLong(TemporalField field)
Gets the value of the specified field from this instant as a long.

getNano() — Gets the number of nanoseconds from the start of the second.

Compare with other Instant

  • isAfter(Instant otherInstant)
  • isBefore(Instant otherInstant)

Convert to jva.util.Date

ZoneId

java.time.ZoneId — A time-zone ID, such as America/New_York .

To create a ZoneId

get system default timezone

To list all available ZoneIds

ZoneOffset

java.time.ZoneOffset — a subclass of ZoneId. It is a time-zone offset from UTC, such as -04:00.

ZoneOffset.UTC is a constatn representing the UTC.

create a ZoneOffset

DateTimeFormatter

java.time.format.DateTimeFormatter is the formatter for printing and parsing date-time objects.

DateTimeFormatter Constants

  • DateTimeFormatter.BASIC_ISO_DATE
  • DateTimeFormatter.ISO_DATE
  • DateTimeFormatter.ISO_DATE_TIME
  • DateTimeFormatter.ISO_INSTANT
  • DateTimeFormatter.ISO_LOCAL_DATE
  • DateTimeFormatter.ISO_LOCAL_DATE_TIME
  • DateTimeFormatter.ISO_LOCAL_TIME
  • DateTimeFormatter.ISO_OFFSET_DATE
  • DateTimeFormatter.ISO_OFFSET_DATE_TIME
  • DateTimeFormatter.ISO_OFFSET_TIME
  • DateTimeFormatter.ISO_ORDINAL_DATE
  • DateTimeFormatter.ISO_TIME
  • DateTimeFormatter.ISO_WEEK_DATE
  • DateTimeFormatter.ISO_ZONED_DATE_TIME
  • DateTimeFormatter.FC_1123_DATE_TIME

Use DateTimeFormatter to parse a DateTime String

Use DateTimeFormatter to format datetime

Create by ofPattern method

ofPattern(String) — Create DateTimeFormatter using pattern. For details on the Pattern symbol and their meaning, see javadoc

Create by ofLocalizedDate method

create locale specific date time format using the following method

  • ofLocalizedDate(FormatStyle)
  • ofLocalizedTime(FormatStyle)
  • ofLocalizedDateTime(FormatStyle)

TemporalAmount Interface

Framework-level interface defining an amount of time, such as “6 hours”, “8 days” or “2 years and 3 months”.
This is the base interface type for amounts of time. An amount is distinct from a date or time-of-day in that it is not tied to any specific point on the time-line.
Period is a date-based implementation, storing years, months and days. Duration is a time-based implementation, storing seconds and nanoseconds, but providing some access using other duration based units such as minutes, hours and fixed 24-hour days.

Period

A date-based amount of time in the ISO-8601 calendar system, such as ‘2 years, 3 months and 4 days’.

ISO-8601 period format is used by parse() and toString() method. ISO-8601 Period has the following format:

Create Period

Create a Period using ofXXX static methods

  • of(int years, int months, int days)
  • ofDays(int days)
  • ofMonths(int months)
  • ofWeeks(int weeks)
  • ofYears(int years)

between(LocalDate startDateInclusive, LocalDate endDateExclusive)

parse(CharSequence text) — Obtains a Period from a text string in ISO-8601 period format.

Calculation

  • plus(TemporalAmount amountToAdd)
  • plusDays(long daysToAdd)
  • plusMonths(long monthsToAdd)
  • plusYears(long yearsToAdd)
  • minus(TemporalAmount amountToSubtract)
  • minusDays(long daysToSubtract)
  • minusMonths(long monthsToSubtract)
  • minusYears(long yearsToSubtract)
  • multipliedBy(int scalar)
  • negated()

Accessors

  • get(TemporalUnit unit)
  • getDays()
  • getMonths()
  • getYears()

Other methods

normalized() — return a copy of normalized Period.

isNegative() — Checks if any of the three units of this period are negative.

isZero() — Checks if all three units of this period are zero.

Duration

java.time.Duration — A time-based amount of time

Create Duration

  • ofDays(long days)
  • ofHours(long hours)
  • ofMillis(long millis)
  • ofMinutes(long minutes)
  • ofNanos(long nanos)
  • ofSeconds(long seconds)
  • ofSeconds(long seconds, long nanoAdjustment)

between(Temporal startInclusive, Temporal endExclusive) — calculate Duration by finding the Duration between two times.

Calculation

  • plus (long amountToAdd, TemporalUnit unit)
  • plus (Duration duration)
  • plusDays (long daysToAdd)
  • plusHours (long hoursToAdd)
  • plusMillis(long millisToAdd)
  • plusMinutes (long minutesToAdd)
  • plusNanos (long nanosToAdd)
  • plusSeconds (long secondsToAdd)
  • minus (long amountToSubtract, TemporalUnit unit)
  • minus (Duration duration)
  • minusDays (long daysToSubtract)
  • minusHours (long hoursToSubtract)
  • minusMillis (long millisToSubtract)
  • minusMinutes (long minutesToSubtract)
  • minusNanos (long nanosToSubtract)
  • minusSeconds (long secondsToSubtract)
  • multipliedBy (long multiplicand)
  • dividedBy(long divisor)
  • dividedBy(Duration divisor)
  • negated()

TemporalUnit Interface

java.time.temporal.TemporalUnit Interface — A unit of date-time, such as Days or Hours.

Implementations are ChronoUnit and Unit. Both are enum. The most commonly used units are defined in ChronoUnit.

ChronoUnit

java.time.temporal.ChronoUnit — an Enum that implements TemporalUnit Interface. Unites for date and time.

ChronoUnit Enum Constants

  • CENTURIES
  • DAYS
  • DECADES
  • ERAS
  • FOREVER
  • HALF DAYS
  • HOURS
  • MICROS
  • MILLENNIA
  • MILLIS
  • MINUTES
  • MONTHS
  • NANOS
  • SECONDS
  • WEEKS
  • YEARS

ChronoUnit.between() — To get the time between two temporal object

ChronoUnit.getDuration() — gets estimate duraration of this ChronoUnit.

ChronoUnit is often used for Date-Time calculation.

TemporalField Insterface

java.time.temporal.TemporalField Interface is used to access a field of a Temporal. ChronoField is the most used implementation.

A field of date-time, such as month-of-year or minute-of-hour.

ChronoField

java.time.temporal.ChronoField — Enum that implements TemporalField insterface.

This set of fields provide field-based access to manipulate a date, time or date-time.

  • ALIGNED_DAY_OF_WEEK_IN_MONTH
  • ALIGNED_DAY_OF_WEEK_IN_YEAR
  • ALIGNED_WEEK_OF_MONTH
  • ALIGNED_WEEK_OF_YEAR
  • AMPM_OF_DAY
  • CLOCK_HOUR_OF_AMPM
  • CLOCK_HOUR_OF_DAY
  • DAY_OF_MONTH
  • DAY_OF_WEEK
  • DAY_OF_YEAR
  • EPOCH_DAY
  • ERA
  • HOUR_OF_AMPM
  • HOUR_OF_DAY
  • INSTANT_SECONDS
  • MICRO_OF_DAY
  • MICRO_OF_SECOND
  • MILLI_OF_DAY
  • MILLI_OF_SECOND
  • MINUTE_OF_DAY
  • MINUTE_OF_HOUR
  • MONTH_OF_YEAR
  • NANO_OF_DAY
  • NANO_OF_SECOND
  • OFFSET_SECONDS
  • PROLEPTIC_MONTH
  • SECOND_OF_DAY
  • SECOND_OF_MINUTE
  • YEAR
  • YEAR_OF_ERA

Fields are how humans generally refer to time, which is in parts.

getDisplayName — Gets the display name for the field in the requested locale.

ChronoUnit VS ChronoField

Units are used to measure a quantity of time

fields are how humans generally refer to time, which is in parts.

To define a complete point on the time-line you have to have a set of linked fields, eg:

  • second-of-minute
  • minute-of-hour
  • hour-of-day
  • day-of-month
  • month-of-year
  • year (-of-forever)

Temporal Interface

Framework-level interface defining read-write access to a temporal object, such as a date, time, offset or some combination of these.

Temporal interface methods

  • isSupported(TemporalUnit)
  • with(TemporalAdjuster)
  • with(TemporalField, long)
  • plus(TemporalAmount)
  • plus(long, TemporalUnit)
  • minus(TemporalAmount)
  • minus(long, TemporalUnit)
  • until(Temporal, TemporalUnit)

Known implementation classes

  • LocalDate
  • LocalDateTime
  • LocalTime
  • OffsetDateTime
  • OffsetTime
  • ZonedDateTime

The following classes also implement Temporal interface but are less used

TemporalAccessor Interface

Framework-level interface defining read-only access to a temporal object, such as a date, time, offset or some combination of these.

Temporal Classes such as LocalDateTime, ZonedDateTime implements this Interface.

Name already in use

wiki / polnoe-rukovodstvo-po-java-8-date-time-api-primery-localdate-instant-localdatetime-parse-i-format.adoc

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink
  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Полное руководство по Java 8 Date Time API. Примеры LocalDate, Instant, LocalDateTime, Parse и Format

С самых первых версий в Java не было единого и удобного подхода для работы с датой и временем, поэтому новый Date/Time API является одним из самых нужных и важных нововведений в Java 8. В этой статье мы на примерах рассмотрим все самые главные нововведения для работы с датой и временем.

Что нам дает новый Java Date Time API?

Прежде чем мы начнем разбираться с новым Java 8 Date Time API, давайте рассмотрим главные проблемы в работе с датой и временем версий Java 7 и ниже:

Классы Java Date Time раскиданы по пакетам. Так, класс Date Class есть как в пакете java.util , так и в java.sql пакете. Классы для форматирования и парсинга определены в java.text пакете.

Пакет java.util.Date содержит как дату, так и время, в то время как java.sql.Date содержит только дату. По моему, оба класса не очень хорошо спроектированы.

Все классы для работы с датой могут изменяться, поэтому они не потокобезопасны. Это одна из самых больших проблем в Date и Calendar классах.

Класс Date не обеспечивает интернационализацию, не поддерживает часовые пояса. Поэтому были введены классы java.util.Calendar и java.util.TimeZone , но опять-таки, они имеют все перечисленные выше проблемы.

Ввиду всех перечисленных выше недостатков сторонними разработчиками была создана библиотека для работы с датой и временем. Она называется Joda Time и очень часто используется в качестве замены стандартным Java классам. Но это тема уже другой статьи.

Разбор Java 8 Date Time API

Java 8 Date Time API предназначена заменить старые классы для работы со временем и датой. Давайте рассмотрим основные пакеты нового API.

Пакет java.time — Это базовый пакет нового Date Time API. Все основные базовые классы являются частью этого пакета: LocalDate , LocalTime , LocalDateTime , Instant , Period , Duration и другие. Все эти классы являются неизменными и потокобезопасными. В большинстве случаев, этих классов будет достаточно для большинства задач.

Пакет java.time.chrono — пакет с общими интерфейсами для не календарных систем ISO. Мы можем наследовать класс AbstractChronology для создания собственной календарной системы.

Пакет java.time.format — пакет с классами форматирования и парсинга времени и даты. В большинстве случаев, мы не будем использовать их напрямую, потому что классы в пакете java.time предоставляют удобные методы для форматирования и парсинга.

Пакет java.time.temporal используется для работы с временными объектами, например, с помощью него мы можем узнать первый или последний день месяца. Методы таких классов сразу заметны на фоне других, потому что всегда имеют формат ‘withXXX‘ .

Пакет java.time.zone — классы для поддержки различных часовых поясов и правила их изменения.

Примеры использования Java Date Time API

Мы уже рассмотрели наиболее важные части Java Date Time API. Пришло время разобраться с классами и и посмотреть их в работе на небольших примерах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *