logo

Dátum a čas Java

Balíky java.time, java.util, java.sql a java.text obsahujú triedy na reprezentáciu dátumu a času. Nasledujúce triedy sú dôležité pre prácu s dátumom v Jave.

Java 8 Date/Time API

Java zaviedla nové API pre dátum a čas od verzie Java 8. Balík java.time obsahuje triedy Java 8 Date and Time.

Klasické rozhranie Date/Time API

Ale klasické alebo staré Java Date API je tiež užitočné. Pozrime sa na zoznam klasických tried Date and Time.

Formátovanie dátumu a času

V jazyku Java môžeme formátovať dátum a čas pomocou nasledujúcich tried:

Java Date and Time API

Java poskytuje funkciu dátumu a času pomocou dvoch balíkov java.time a java.util. Balík java.time je predstavený v jazyku Java 8 a novozavedené triedy sa snažia prekonať nedostatky starších tried java.util.Date a java.util.Calendar.

Klasické triedy Date Time API

Primárne triedy pred vydaním Java 8 boli:

diskrétna matematická negácia

Java.lang.System: Trieda poskytuje metódu currentTimeMillis(), ktorá vracia aktuálny čas v milisekundách. Zobrazuje aktuálny dátum a čas v milisekundách od 1. januára 1970.

java.util.Date: Používa sa na zobrazenie konkrétneho okamihu času s jednotkou milisekúnd.

java.util.Calendar: Je to abstraktná trieda, ktorá poskytuje metódy na konverziu medzi inštanciami a manipuláciu s poľami kalendára rôznymi spôsobmi.

java.text.SimpleDateFormat: Je to trieda, ktorá sa používa na formátovanie a analýzu dátumov preddefinovaným spôsobom alebo užívateľom definovaným vzorom.

java.util.TimeZone: Predstavuje posun časového pásma a tiež počíta s letným časom.

Nevýhody existujúcich rozhraní Date/Time API

    Bezpečnosť závitu:Existujúce triedy, ako napríklad Dátum a Kalendár, neposkytujú bezpečnosť vlákien. Preto to vedie k ťažko laditeľným problémom so súbežnosťou, o ktoré sa musia vývojári postarať. Nové Date and Time API Java 8 poskytujú bezpečnosť vlákien a sú nemenné, čím sa vyhýbajú problémom so súbežnosťou zo strany vývojárov.Zlý návrh API:Klasické rozhrania API pre dátum a kalendár neposkytujú metódy na vykonávanie základných každodenných funkcií. Triedy Date and Time zavedené v Java 8 sú zamerané na ISO a poskytujú množstvo rôznych metód na vykonávanie operácií týkajúcich sa dátumu, času, trvania a období.Zložitá manipulácia s časovým pásmom:Spracovať časové pásmo pomocou klasických tried Dátum a Kalendár je ťažké, pretože logiku na to mali napísať vývojári. S novými rozhraniami API sa dá manipulácia s časovým pásmom ľahko vykonať pomocou miestnych a ZonedDate/Time API.

Nové rozhranie Date Time API v Java 8

Nové API pre dátum pomáha prekonať vyššie uvedené nevýhody starších tried. Zahŕňa tieto triedy:

java.time.LocalDate: Predstavuje rok-mesiac-deň v kalendári ISO a je užitočný na zobrazenie dátumu bez času. Môže sa použiť iba na zobrazenie informácií o dátume, ako je dátum narodenia alebo dátum svadby.

java.time.LocalTime: Zaoberá sa iba časom. Je to užitočné na zobrazenie času dňa podľa ľudí, ako sú časy filmov alebo otváracie a zatváracie časy miestnej knižnice.

java.time.LocalDateTime: Zvláda dátum aj čas bez časového pásma. Ide o kombináciu LocalDate s LocalTime.

java.time.ZonedDateTime: Spája triedu LocalDateTime s informáciami o zóne uvedenými v triede ZoneId. Predstavuje úplnú dátumovú a časovú pečiatku spolu s informáciami o časovom pásme.

java.time.OffsetTime: Spracúva čas so zodpovedajúcim posunom časového pásma od Greenwich/UTC bez ID časového pásma.

java.time.OffsetDateTime: Spracúva dátum a čas so zodpovedajúcim posunom časového pásma od Greenwich/UTC, bez ID časového pásma.

java.time.Clock : Poskytuje prístup k aktuálnemu okamihu, dátumu a času v akomkoľvek danom časovom pásme. Aj keď je použitie triedy Clock voliteľné, táto funkcia nám umožňuje otestovať váš kód pre iné časové pásma alebo pomocou pevných hodín, kde sa čas nemení.

java.time.Instant : Predstavuje začiatok nanosekundy na časovej osi (od EPOCH) a je užitočný na generovanie časovej pečiatky, ktorá predstavuje strojový čas. Okamih, ktorý nastane pred epochou, má zápornú hodnotu a okamih, ktorý nastane po epoche, má kladnú hodnotu.

java.time.Duration : Rozdiel medzi dvoma okamihmi a meraný v sekundách alebo nanosekundách a nepoužíva konštrukty založené na dátume, ako sú roky, mesiace a dni, hoci trieda poskytuje metódy, ktoré sa konvertujú na dni, hodiny a minúty.

java.time.Period : Používa sa na definovanie rozdielu medzi dátumami v hodnotách založených na dátume (roky, mesiace, dni).

java.time.ZoneId : Uvádza identifikátor časového pásma a poskytuje pravidlá pre konverziu medzi Instant a LocalDateTime.

java.time.ZoneOffset : Popisuje posun časového pásma od času Greenwich/UTC.

java.time.format.DateTimeFormatter : Dodáva sa s rôznymi preddefinovanými formátovačmi, alebo si môžeme definovať vlastný. Má metódu parse() alebo format() na analýzu a formátovanie hodnôt dátumu a času.