logo

Java datum i vrijeme

Paketi java.time, java.util, java.sql i java.text sadrže klase za predstavljanje datuma i vremena. Sljedeće klase važne su za rad s datumom u Javi.

Java 8 API za datum/vrijeme

Java je uvela novi API za datum i vrijeme od Jave 8. Paket java.time sadrži Java 8 klase datuma i vremena.

Klasični API za datum/vrijeme

Ali klasični ili stari Java Date API također je koristan. Pogledajmo popis klasičnih klasa datuma i vremena.

Formatiranje datuma i vremena

Datum i vrijeme možemo formatirati u Javi pomoću sljedećih klasa:

Java API-ji za datum i vrijeme

Java pruža funkcionalnost datuma i vremena uz pomoć dva paketa java.time i java.util. Paket java.time predstavljen je u Javi 8, a novouvedene klase pokušavaju prevladati nedostatke naslijeđenih klasa java.util.Date i java.util.Calendar.

Klasične API klase datuma i vremena

Primarne klase prije izdanja Jave 8 bile su:

slušaj luku

Java.lang.Sustav: Klasa pruža metodu currentTimeMillis() koja vraća trenutno vrijeme u milisekundama. Prikazuje trenutni datum i vrijeme u milisekundama od 1. siječnja 1970.

java.util.Date: Koristi se za prikaz određenog trenutka vremena, s jedinicom milisekunde.

java.util.Calendar: To je apstraktna klasa koja pruža metode za pretvaranje između instanci i manipuliranje poljima kalendara na različite načine.

java.text.SimpleDateFormat: To je klasa koja se koristi za formatiranje i raščlanjivanje datuma na unaprijed definiran način ili korisnički definiran obrazac.

java.util.TimeZone: Predstavlja pomak vremenske zone, a također utvrđuje ljetno računanje vremena.

Nedostaci postojećih API-ja za datum/vrijeme

    Sigurnost niti:Postojeće klase kao što su Datum i Kalendar ne pružaju sigurnost niti. Stoga dovodi do problema s paralelnošću koje je teško otkloniti i o kojima programeri moraju voditi računa. Novi API-ji za datum i vrijeme u Javi 8 pružaju sigurnost niti i nepromjenjivi su, čime se izbjegavaju problemi paralelnosti od strane programera.Loše dizajniranje API-ja:Klasični API-ji za datum i kalendar ne pružaju metode za izvođenje osnovnih svakodnevnih funkcija. Klase datuma i vremena uvedene u Javi 8 su ISO-centrične i pružaju niz različitih metoda za izvođenje operacija u vezi s datumom, vremenom, trajanjem i razdobljima.Teško rukovanje vremenskom zonom:Rukovanje vremenskom zonom pomoću klasičnih klasa Datum i Kalendar je teško jer su programeri trebali napisati logiku za to. S novim API-jima, rukovanje vremenskom zonom može se jednostavno obaviti pomoću API-ja Local i ZonedDate/Time.

Novi API za datum i vrijeme u Javi 8

Novi datumski API pomaže u prevladavanju gore navedenih nedostataka s naslijeđenim klasama. Uključuje sljedeće klase:

java.time.LocalDate: Predstavlja godinu-mjesec-dan u ISO kalendaru i koristan je za predstavljanje datuma bez vremena. Može se koristiti za predstavljanje informacija samo o datumu kao što je datum rođenja ili datum vjenčanja.

java.time.LocalTime: Bavi se samo vremenom. Korisno je za predstavljanje doba dana ovisno o ljudima, kao što je vrijeme gledanja filmova ili vrijeme otvaranja i zatvaranja lokalne knjižnice.

java.time.LocalDateTime: Obrađuje i datum i vrijeme, bez vremenske zone. To je kombinacija LocalDate i LocalTime.

java.time.ZonedDateTime: Kombinira klasu LocalDateTime s informacijama o zoni danim u klasi ZoneId. Predstavlja potpunu datumsku vremensku oznaku zajedno s informacijama o vremenskoj zoni.

java.time.OffsetTime: Obrađuje vrijeme s odgovarajućim pomakom vremenske zone u odnosu na Greenwich/UTC, bez ID-a vremenske zone.

java.time.OffsetDateTime: Obrađuje datum i vrijeme s odgovarajućim pomakom vremenske zone u odnosu na Greenwich/UTC, bez ID-a vremenske zone.

java.vrijeme.Sat: Omogućuje pristup trenutnom trenutku, datumu i vremenu u bilo kojoj vremenskoj zoni. Iako je upotreba klase Sat izborna, ova nam značajka omogućuje testiranje vašeg koda za druge vremenske zone ili korištenjem fiksnog sata, gdje se vrijeme ne mijenja.

java.time.Instant : Predstavlja početak nanosekunde na vremenskoj crti (od EPOCH-a) i koristan je za generiranje vremenske oznake koja predstavlja strojno vrijeme. Trenutak koji se dogodi prije epohe ima negativnu vrijednost, a trenutak koji se dogodi nakon epohe ima pozitivnu vrijednost.

java.time.Duration : Razlika između dva trenutka i mjerena u sekundama ili nanosekundama i ne koristi konstrukcije temeljene na datumu kao što su godine, mjeseci i dani, iako klasa pruža metode koje pretvaraju u dane, sate i minute.

java.time.Period : Koristi se za definiranje razlike između datuma u vrijednostima temeljenim na datumu (godine, mjeseci, dani).

java.time.ZoneId: Navodi identifikator vremenske zone i daje pravila za pretvorbu između Instant i LocalDateTime.

java.time.ZoneOffset: Opisuje pomak vremenske zone od Greenwich/UTC vremena.

java.time.format.DateTimeFormatter: Dolazi s raznim unaprijed definiranim programima za formatiranje, ili možemo definirati vlastiti. Ima metodu parse() ili format() za analizu i oblikovanje vrijednosti datuma i vremena.