logo

Дата и час на Java

Пакетите java.time, java.util, java.sql и java.text съдържат класове за представяне на дата и час. Следните класове са важни за работа с дата в Java.

Java 8 API за дата/час

Java въведе нов API за дата и час след Java 8. Пакетът java.time съдържа класове за дата и час на Java 8.

Класически API за дата/час

Но класическият или стар Java Date API също е полезен. Нека да видим списъка с класически класове за дата и час.

Форматиране на дата и час

Можем да форматираме дата и час в Java, като използваме следните класове:

Java API за дата и час

Java предоставя функционалност за дата и час с помощта на два пакета java.time и java.util. Пакетът java.time е въведен в Java 8 и нововъведените класове се опитват да преодолеят недостатъците на наследените класове java.util.Date и java.util.Calendar.

Класически API класове за дата и час

Основните класове преди пускането на Java 8 бяха:

java е празна

Java.lang.System: Класът предоставя метода currentTimeMillis(), който връща текущото време в милисекунди. Показва текущата дата и час в милисекунди от 1 януари 1970 г.

java.util.Дата: Използва се за показване на конкретен момент от време с единица милисекунда.

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

java.text.SimpleDateFormat: Това е клас, който се използва за форматиране и анализиране на датите по предварително определен начин или дефиниран от потребителя модел.

java.util.TimeZone: Той представлява отместване на часовата зона и също така изчислява лятното часово време.

Недостатъци на съществуващите API за дата/час

    Безопасност на нишката:Съществуващите класове като дата и календар не осигуряват безопасност на нишката. Следователно това води до трудни за отстраняване на грешки проблеми с паралелността, за които разработчиците трябва да се погрижат. Новите API за дата и час на Java 8 осигуряват безопасност на нишката и са неизменни, като по този начин се избягва проблемът с паралелността от разработчиците.Лошо проектиране на API:Класическите API за дата и календар не предоставят методи за извършване на основни ежедневни функции. Класовете за дата и час, въведени в Java 8, са ISO-центрични и предоставят редица различни методи за извършване на операции по отношение на дата, час, продължителност и периоди.Трудна обработка на часовата зона:Да се ​​борави с часовата зона с помощта на класически класове за дата и календар е трудно, защото разработчиците трябваше да напишат логиката за това. С новите API обработката на часовата зона може лесно да се извърши с API за местни и 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.Продължителност: Разлика между два момента и измерена в секунди или наносекунди и не използва базирани на дата конструкции като години, месеци и дни, въпреки че класът предоставя методи, които преобразуват в дни, часове и минути.

java.time.Period: Използва се за определяне на разликата между датите в стойности, базирани на дата (години, месеци, дни).

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

java.time.ZoneOffset: Той описва отместване на часовата зона спрямо Гринуич/UTC време.

java.time.format.DateTimeFormatter: Предлага различни предварително дефинирани програми за форматиране или ние можем да дефинираме свой собствен. Има метод parse() или format() за анализиране и форматиране на стойностите за дата и час.