logo

Дата й час Java

Пакунки java.time, java.util, java.sql і java.text містять класи для представлення дати та часу. Наступні класи важливі для роботи з датою в Java.

API дати/часу Java 8

Починаючи з Java 8, Java представила новий API дати й часу. Пакет java.time містить класи дати й часу Java 8.

Класичний API дати/часу

Але класичний або старий Java Date API також корисний. Давайте подивимося список класичних класів Дата і Час.

Форматування дати та часу

Ми можемо форматувати дату й час у Java за допомогою таких класів:

API дати й часу Java

Java забезпечує функціональність дати та часу за допомогою двох пакетів java.time та java.util. Пакет java.time представлено в Java 8, і нещодавно представлені класи намагаються подолати недоліки застарілих класів java.util.Date і java.util.Calendar.

Класичні класи API дати та часу

Основними класами до випуску Java 8 були:

скільки клавіш має клавіатура

Java.lang.System: Клас надає метод currentTimeMillis(), який повертає поточний час у мілісекундах. Він показує поточну дату та час у мілісекундах з 1 січня 1970 року.

java.util.Date: Використовується для показу конкретного моменту часу з одиницею мілісекунди.

java.util.Calendar: Це абстрактний клас, який надає методи для перетворення між екземплярами та маніпулювання полями календаря різними способами.

java.text.SimpleDateFormat: Це клас, який використовується для форматування та аналізу дат у попередньо визначений спосіб або за шаблоном, визначеним користувачем.

java.util.TimeZone: Він представляє зміщення часового поясу, а також визначає літній час.

Недоліки існуючих API дати/часу

    Безпека потоків:Існуючі класи, такі як Date і Calendar, не забезпечують безпеку потоків. Отже, це призводить до складних для налагодження проблем паралелізму, про які розробники повинні подбати. Нові API дати й часу Java 8 забезпечують безпеку потоків і є незмінними, отже, уникаючи проблеми паралелізму з боку розробників.Поганий дизайн API:Класичні API дати та календаря не надають методів виконання основних повсякденних функцій. Класи дати та часу, введені в Java 8, орієнтовані на ISO та надають ряд різних методів для виконання операцій щодо дати, часу, тривалості та періодів.Складне керування часовим поясом:Обробляти часовий пояс за допомогою класичних класів Date і Calendar складно, оскільки розробники повинні були написати для цього логіку. З новими API обробку часового поясу можна легко виконати за допомогою API Local і ZonedDate/Time.

Новий API дати і часу в Java 8

Новий API дати допомагає подолати недоліки, згадані вище, із застарілими класами. Він включає наступні класи:

java.time.LocalDate: Він представляє рік-місяць-день у календарі ISO і корисний для представлення дати без часу. Його можна використовувати для представлення інформації лише про дату, як-от дата народження або дата весілля.

java.time.LocalTime: Це стосується лише часу. Це корисно для представлення часу доби, наприклад часу перегляду фільмів або часу відкриття та закриття місцевої бібліотеки.

java.time.LocalDateTime: Він обробляє як дату, так і час без часового поясу. Це комбінація LocalDate і LocalTime.

java.time.ZonedDateTime: Він поєднує клас LocalDateTime з інформацією про зону, наданою в класі ZoneId. Він представляє повну позначку дати та часу разом із інформацією про часовий пояс.

java.time.OffsetTime: Він обробляє час із відповідним зміщенням часового поясу від Гринвіча/UTC без ідентифікатора часового поясу.

java.time.OffsetDateTime: Він обробляє дату й час із відповідним зміщенням часового поясу від Гринвіча/UTC без ідентифікатора часового поясу.

java.time.Clock : Він забезпечує доступ до поточного моменту, дати та часу в будь-якому часовому поясі. Хоча використання класу Clock є необов’язковим, ця функція дозволяє перевірити ваш код для інших часових поясів або за допомогою фіксованого годинника, де час не змінюється.

java.time.Instant : Він представляє початок наносекунди на часовій шкалі (з моменту EPOCH) і корисний для створення мітки часу для представлення машинного часу. Момент, що настає перед епохою, має негативне значення, а момент, що настає після епохи, має позитивне значення.

java.time.Duration : Різниця між двома моментами і вимірюється в секундах або наносекундах і не використовує конструкції на основі дати, такі як роки, місяці та дні, хоча клас надає методи, які перетворюють на дні, години та хвилини.

java.time.Period : Він використовується для визначення різниці між датами в значеннях на основі дати (роки, місяці, дні).

java.time.ZoneId : Він визначає ідентифікатор часового поясу та надає правила для перетворення між Instant і LocalDateTime.

java.time.ZoneOffset : Він описує зміщення часового поясу від часу Гринвіча/UTC.

java.time.format.DateTimeFormatter : Він пропонує різні попередньо визначені форматувальники, або ми можемо визначити свій власний. Він має метод parse() або format() для аналізу та форматування значень дати й часу.