logo

Datum in čas Java

Paketi java.time, java.util, java.sql in java.text vsebujejo razrede za predstavitev datuma in ure. Naslednji razredi so pomembni za obravnavo datuma v Javi.

Java 8 API za datum/čas

Java je od Jave 8 uvedla nov API za datum in čas. Paket java.time vsebuje razrede datuma in časa Java 8.

Klasični API za datum/čas

Uporaben pa je tudi klasični ali stari Java Date API. Oglejmo si seznam klasičnih razredov datuma in časa.

Oblikovanje datuma in časa

V Javi lahko formatiramo datum in čas z uporabo naslednjih razredov:

API-ji za datum in čas Java

Java zagotavlja funkcijo datuma in časa s pomočjo dveh paketov java.time in java.util. Paket java.time je predstavljen v Javi 8 in na novo uvedeni razredi poskušajo premagati pomanjkljivosti podedovanih razredov java.util.Date in java.util.Calendar.

Klasični razredi API za datum in čas

Primarni razredi pred izdajo Jave 8 so bili:

java je prazna

Java.lang.System: Razred nudi metodo currentTimeMillis(), ki vrne trenutni čas v milisekundah. Prikazuje trenutni datum in čas v milisekundah od 1. januarja 1970.

java.util.Date: Uporablja se za prikaz določenega trenutka časa z enoto milisekunde.

java.util.Calendar: Je abstrakten razred, ki ponuja metode za pretvorbo med primerki in manipuliranje s koledarskimi polji na različne načine.

java.text.SimpleDateFormat: To je razred, ki se uporablja za oblikovanje in razčlenjevanje datumov na vnaprej določen način ali uporabniško določen vzorec.

java.util.TimeZone: Predstavlja zamik časovnega pasu in ugotavlja tudi poletni čas.

Slabosti obstoječih API-jev za datum/čas

    Varnost niti:Obstoječi razredi, kot sta datum in koledar, ne zagotavljajo varnosti niti. Zato vodi do težav s sočasnostjo, ki jih je težko odpraviti, za katere morajo skrbeti razvijalci. Novi API-ji za datum in čas Jave 8 zagotavljajo varnost niti in so nespremenljivi, s čimer se izogibajo težavam s sočasnostjo s strani razvijalcev.Slabo oblikovanje API-ja:Klasični API-ji za datum in koledar ne nudijo metod za izvajanje osnovnih vsakodnevnih funkcij. Razredi datuma in časa, predstavljeni v Javi 8, so osredotočeni na ISO in zagotavljajo številne različne metode za izvajanje operacij v zvezi z datumom, uro, trajanjem in obdobji.Težavno upravljanje časovnega pasu:Obravnavanje časovnega pasu s klasičnimi razredi Datum in Koledar je težko, ker naj bi razvijalci napisali logiko za to. Z novimi API-ji je mogoče enostavno obdelavo časovnega pasu izvesti z API-ji Local in ZonedDate/Time.

Nov API za datum in čas v Javi 8

Novi datumski API pomaga premagati zgoraj omenjene pomanjkljivosti s podedovanimi razredi. Vključuje naslednje razrede:

java.time.LocalDate: Predstavlja leto-mesec-dan v koledarju ISO in je uporaben za predstavitev datuma brez časa. Uporablja se lahko samo za predstavitev informacij o datumu, kot je datum rojstva ali datum poroke.

java.time.LocalTime: Ukvarja se samo s časom. Uporaben je za predstavitev časa dneva, ki temelji na ljudeh, na primer ure kinoteke ali odpiralne in zapiralne ure lokalne knjižnice.

java.time.LocalDateTime: Obravnava tako datum kot uro, brez časovnega pasu. Je kombinacija LocalDate in LocalTime.

java.time.ZonedDateTime: Združuje razred LocalDateTime z informacijami o območju, podanimi v razredu ZoneId. Predstavlja celoten datumski žig skupaj s podatki o časovnem pasu.

java.time.OffsetTime: Obdeluje čas z ustreznim odmikom časovnega pasu od Greenwicha/UTC, brez ID-ja časovnega pasu.

java.time.OffsetDateTime: Obravnava datum in uro z ustreznim odmikom časovnega pasu od Greenwicha/UTC, brez ID-ja časovnega pasu.

java.time.Clock: Omogoča dostop do trenutnega trenutka, datuma in časa v katerem koli danem časovnem pasu. Čeprav uporaba razreda Clock ni obvezna, nam ta funkcija omogoča, da preizkusimo vašo kodo za druge časovne pasove ali z uporabo fiksne ure, kjer se čas ne spreminja.

java.time.Instant: Predstavlja začetek nanosekunde na časovni premici (od EPOCH) in uporaben za generiranje časovnega žiga, ki predstavlja strojni čas. Trenutek, ki se pojavi pred epoho, ima negativno vrednost, trenutek, ki se pojavi po epohi, pa ima pozitivno vrednost.

java.time.Duration : Razlika med dvema trenutkoma in merjeno v sekundah ali nanosekundah in ne uporablja datumskih konstruktov, kot so leta, meseci in dnevi, čeprav razred ponuja metode, ki pretvorijo v dneve, ure in minute.

java.time.Period: Uporablja se za določitev razlike med datumi v vrednostih, ki temeljijo na datumu (leta, meseci, dnevi).

java.time.ZoneId: Navaja identifikator časovnega pasu in zagotavlja pravila za pretvorbo med trenutkom in lokalnim datumom.

java.time.ZoneOffset: Opisuje odmik časovnega pasu od časa Greenwich/UTC.

java.time.format.DateTimeFormatter: Prihaja z različnimi vnaprej določenimi oblikovalniki, lahko pa določimo svojega. Ima metodo parse() ali format() za razčlenjevanje in oblikovanje vrednosti datuma in časa.