logo

Datum a čas Java

Balíčky java.time, java.util, java.sql a java.text obsahují třídy pro reprezentaci data a času. Následující třídy jsou důležité pro práci s datem v Javě.

Java 8 Date/Time API

Java zavedla nové API pro datum a čas od verze Java 8. Balíček java.time obsahuje třídy Java 8 Date and Time.

Klasické rozhraní Date/Time API

Ale klasické nebo staré Java Date API je také užitečné. Podívejme se na seznam klasických tříd Date and Time.

Formátování data a času

V Javě můžeme formátovat datum a čas pomocí následujících tříd:

Java Date and Time API

Java poskytuje funkci data a času pomocí dvou balíčků java.time a java.util. Balíček java.time je představen v Javě 8 a nově zavedené třídy se snaží překonat nedostatky starších tříd java.util.Date a java.util.Calendar.

Klasické třídy Date Time API

Primární třídy před vydáním Java 8 byly:

průmysl a továrna

Java.lang.System: Třída poskytuje metodu currentTimeMillis(), která vrací aktuální čas v milisekundách. Zobrazuje aktuální datum a čas v milisekundách od 1. ledna 1970.

java.util.Date: Používá se k zobrazení konkrétního okamžiku času s jednotkou milisekund.

java.util.Calendar: Je to abstraktní třída, která poskytuje metody pro převod mezi instancemi a manipulaci s poli kalendáře různými způsoby.

java.text.SimpleDateFormat: Je to třída, která se používá k formátování a analýze dat předdefinovaným způsobem nebo uživatelem definovaného vzoru.

java.util.TimeZone: Představuje posun časového pásma a také vypočítává letní čas.

Nevýhody existujících rozhraní Date/Time API

    Bezpečnost závitu:Stávající třídy jako Date a Calendar neposkytují zabezpečení vláken. To vede k těžko laditelným problémům souběžnosti, o které se musí vývojáři postarat. Nová rozhraní API pro datum a čas Java 8 poskytují bezpečnost vláken a jsou neměnná, čímž se vyvarují problému souběžnosti ze strany vývojářů.Špatný návrh API:Klasická rozhraní API pro datum a kalendář neposkytují metody pro provádění základních každodenních funkcí. Třídy Date and Time zavedené v Javě 8 jsou zaměřeny na ISO a poskytují řadu různých metod pro provádění operací týkajících se data, času, trvání a období.Obtížná manipulace s časovým pásmem:Zvládnout časové pásmo pomocí klasických tříd Date a Calendar je obtížné, protože logiku pro to měli napsat vývojáři. S novými rozhraními API lze práci s časovým pásmem snadno provádět pomocí rozhraní Local a ZonedDate/Time API.

Nové rozhraní Date Time API v Javě 8

Nové datové rozhraní API pomáhá překonat výše uvedené nevýhody u starších tříd. Zahrnuje následující třídy:

java.time.LocalDate: Představuje rok-měsíc-den v kalendáři ISO a je užitečný pro reprezentaci data bez času. Lze jej použít pouze k zobrazení informací o datu, jako je datum narození nebo datum svatby.

java.time.LocalTime: Zabývá se pouze časem. Je to užitečné pro znázornění denní doby založené na člověku, jako jsou časy filmů nebo otevírací a zavírací časy místní knihovny.

java.time.LocalDateTime: Zvládá jak datum, tak čas, bez časového pásma. Jedná se o kombinaci LocalDate s LocalTime.

java.time.ZonedDateTime: Kombinuje třídu LocalDateTime s informacemi o zóně uvedenými ve třídě ZoneId. Představuje kompletní datum a čas spolu s informacemi o časovém pásmu.

java.time.OffsetTime: Zpracovává čas s odpovídajícím posunem časového pásma od Greenwiche/UTC, bez ID časového pásma.

java.time.OffsetDateTime: Zpracovává datum a čas s odpovídajícím posunem časového pásma od Greenwiche/UTC, bez ID časového pásma.

java.time.Clock : Poskytuje přístup k aktuálnímu okamžiku, datu a času v libovolném časovém pásmu. Ačkoli je použití třídy Clock volitelné, tato funkce nám umožňuje otestovat váš kód pro jiná časová pásma nebo pomocí pevných hodin, kde se čas nemění.

java.time.Instant : Představuje začátek nanosekundy na časové ose (od EPOCH) a je užitečný pro generování časového razítka reprezentujícího strojový čas. Okamžik, který nastane před epochou, má zápornou hodnotu a okamžik, který nastane po epoše, má kladnou hodnotu.

java.time.Duration : Rozdíl mezi dvěma okamžiky a měřený v sekundách nebo nanosekundách a nepoužívá konstrukce založené na datu, jako jsou roky, měsíce a dny, ačkoli třída poskytuje metody, které se převádějí na dny, hodiny a minuty.

java.time.Period : Používá se k definování rozdílu mezi daty v hodnotách založených na datu (roky, měsíce, dny).

java.time.ZoneId : Uvádí identifikátor časové zóny a poskytuje pravidla pro převod mezi Instant a LocalDateTime.

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

java.time.format.DateTimeFormatter : Přichází s různými předdefinovanými formátovači, nebo si můžeme definovat vlastní. Má metodu parse() nebo format() pro analýzu a formátování hodnot data a času.