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. Пришло время разобраться с классами и и посмотреть их в работе на небольших примерах.