logo

Data i godzina w Javie

Pakiety java.time, java.util, java.sql i java.text zawierają klasy reprezentujące datę i godzinę. Poniższe klasy są ważne w przypadku obsługi daty w Javie.

Interfejs API daty/godziny w Javie 8

Java wprowadziła nowy interfejs API daty i godziny od wersji Java 8. Pakiet java.time zawiera klasy daty i godziny Java 8.

Klasyczny interfejs API daty/godziny

Ale klasyczny lub stary interfejs Java Date API jest również przydatny. Zobaczmy listę klasycznych klas Date i Time.

Formatowanie daty i godziny

Możemy sformatować datę i godzinę w Javie, korzystając z następujących klas:

Interfejsy API daty i godziny w Javie

Java zapewnia funkcjonalność daty i godziny za pomocą dwóch pakietów java.time i java.util. Pakiet java.time został wprowadzony w Javie 8, a nowo wprowadzone klasy próbują przezwyciężyć niedociągnięcia starszych klas java.util.Date i java.util.Calendar.

Klasyczne klasy API daty i godziny

Podstawowymi klasami przed wydaniem Java 8 były:

wyszukiwanie liniowe w Javie

System.języka Java: Klasa udostępnia metodę currentTimeMillis(), która zwraca bieżący czas w milisekundach. Pokazuje aktualną datę i godzinę w milisekundach od 1 stycznia 1970 r.

Java.util.Data: Służy do pokazania określonej chwili czasu, z jednostką milisekundy.

java.util.Calendar: Jest to klasa abstrakcyjna udostępniająca metody konwersji między instancjami i manipulowania polami kalendarza na różne sposoby.

Java.text.SimpleDateFormat: Jest to klasa używana do formatowania i analizowania dat w sposób predefiniowany lub według wzoru zdefiniowanego przez użytkownika.

Java.util.Strefa czasowa: Reprezentuje przesunięcie strefy czasowej, a także oblicza czas letni.

Wady istniejących interfejsów API daty/godziny

    Bezpieczeństwo wątku:Istniejące klasy, takie jak Date i Calendar, nie zapewniają bezpieczeństwa wątków. Prowadzi to zatem do trudnych do debugowania problemów ze współbieżnością, którymi muszą się zająć programiści. Nowe interfejsy API daty i godziny w Javie 8 zapewniają bezpieczeństwo wątków i są niezmienne, co pozwala uniknąć problemów ze współbieżnością ze strony programistów.Złe projektowanie API:Klasyczne interfejsy API daty i kalendarza nie udostępniają metod wykonywania podstawowych, codziennych funkcji. Klasy Date i Time wprowadzone w Javie 8 są zorientowane na ISO i zapewniają wiele różnych metod wykonywania operacji na dacie, godzinie, czasie trwania i okresach.Trudna obsługa stref czasowych:Obsługa strefy czasowej przy użyciu klasycznych klas Date i Calendar jest trudna, ponieważ programiści mieli napisać dla niej logikę. Dzięki nowym interfejsom API obsługę stref czasowych można łatwo wykonać za pomocą interfejsów API Local i ZonedDate/Time.

Nowe API daty i godziny w Javie 8

Nowy interfejs API daty pomaga przezwyciężyć wady wspomniane powyżej w przypadku starszych klas. Obejmuje następujące zajęcia:

java.time.LocalDate: Reprezentuje rok-miesiąc-dzień w kalendarzu ISO i jest przydatny do przedstawiania daty bez godziny. Można go używać do reprezentowania wyłącznie informacji o dacie, takich jak data urodzenia lub data ślubu.

java.time.LocalTime: Zajmuje się tylko czasem. Jest przydatny do reprezentowania pory dnia opartej na ludziach, na przykład kin lub godzin otwarcia i zamknięcia lokalnej biblioteki.

java.time.LocalDateTime: Obsługuje zarówno datę, jak i godzinę, bez strefy czasowej. Jest to połączenie LocalDate z LocalTime.

java.time.ZonedDateTime: Łączy klasę LocalDateTime z informacją o strefie podaną w klasie ZoneId. Reprezentuje pełny znacznik daty i godziny wraz z informacjami o strefie czasowej.

java.time.OffsetTime: Obsługuje czas z odpowiednim przesunięciem strefy czasowej w stosunku do Greenwich/UTC, bez identyfikatora strefy czasowej.

java.time.OffsetDateTime: Obsługuje datę i godzinę z odpowiednim przesunięciem strefy czasowej w stosunku do Greenwich/UTC, bez identyfikatora strefy czasowej.

Java.time.Clock : Zapewnia dostęp do aktualnej chwili, daty i godziny w dowolnej strefie czasowej. Chociaż użycie klasy Clock jest opcjonalne, ta funkcja pozwala nam przetestować Twój kod dla innych stref czasowych lub przy użyciu stałego zegara, gdzie czas się nie zmienia.

java.time.Instant : Reprezentuje początek nanosekundy na osi czasu (od EPOCH) i jest przydatny do generowania znacznika czasu reprezentującego czas maszynowy. Chwila, która następuje przed epoką, ma wartość ujemną, a chwila, która następuje po epoce, ma wartość dodatnią.

Java.time.Duration : Różnica między dwiema chwilami mierzona w sekundach lub nanosekundach i nie używa konstrukcji opartych na datach, takich jak lata, miesiące i dni, chociaż klasa udostępnia metody konwertujące na dni, godziny i minuty.

Java.time.Period : Służy do definiowania różnicy pomiędzy datami w wartościach opartych na datach (lata, miesiące, dni).

java.time.ZoneId : Podaje identyfikator strefy czasowej i zapewnia zasady konwersji między Instant i LocalDateTime.

java.time.ZoneOffset : Opisuje przesunięcie strefy czasowej w stosunku do czasu Greenwich/UTC.

java.time.format.DateTimeFormatter : Zawiera różne predefiniowane formatery lub możemy zdefiniować własny. Posiada metodę parse() lub format() do analizowania i formatowania wartości daty i godziny.