logo

Java dato og klokkeslett

Pakkene java.time, java.util, java.sql og java.text inneholder klasser for å representere dato og klokkeslett. Følgende klasser er viktige for å håndtere dato i Java.

Java 8 Dato/Time API

Java har introdusert en ny Date and Time API siden Java 8. Java.time-pakken inneholder Java 8 Date and Time-klasser.

Klassisk dato/klokkeslett API

Men klassisk eller gammel Java Date API er også nyttig. La oss se listen over klassiske dato- og klokkeslettklasser.

Formatering av dato og klokkeslett

Vi kan formatere dato og klokkeslett i Java ved å bruke følgende klasser:

Java dato og klokkeslett APIer

Java gir dato- og klokkeslettfunksjonaliteten ved hjelp av to pakker java.time og java.util. Pakken java.time er introdusert i Java 8, og de nylig introduserte klassene prøver å overvinne manglene til de eldre klassene java.util.Date og java.util.Calendar.

Klassisk dato og klokkeslett API-klasser

De primære klassene før Java 8-utgivelsen var:

min maks

Java.lang.System: Klassen gir currentTimeMillis()-metoden som returnerer gjeldende tid i millisekunder. Den viser gjeldende dato og klokkeslett i millisekunder fra 1. januar 1970.

java.util.Date: Den brukes til å vise spesifikke øyeblikk av tid, med enheten millisekund.

java.util.Calendar: Det er en abstrakt klasse som gir metoder for å konvertere mellom instanser og manipulere kalenderfeltene på forskjellige måter.

java.text.SimpleDateFormat: Det er en klasse som brukes til å formatere og analysere datoene på en forhåndsdefinert måte eller brukerdefinert mønster.

java.util.TimeZone: Den representerer en tidssoneforskyvning, og regner også ut sommertid.

Ulemper med eksisterende Dato/Time API-er

    Trådsikkerhet:De eksisterende klassene som Dato og Kalender gir ikke trådsikkerhet. Derfor fører det til vanskelige å feilsøke samtidighetsproblemer som må tas hånd om av utviklere. De nye dato- og tids-API-ene til Java 8 gir trådsikkerhet og er uforanderlige, og unngår dermed samtidighetsproblemet fra utviklere.Dårlig API-design:De klassiske dato- og kalender-API-ene gir ikke metoder for å utføre grunnleggende daglige funksjoner. Dato- og klokkeslettklassene introdusert i Java 8 er ISO-sentriske og gir en rekke forskjellige metoder for å utføre operasjoner angående dato, klokkeslett, varighet og perioder.Vanskelig håndtering av tidssone:Å håndtere tidssonen ved å bruke klassiske dato- og kalenderklasser er vanskelig fordi utviklerne skulle skrive logikken for det. Med de nye API-ene kan tidssonehåndteringen enkelt gjøres med Local og ZonedDate/Time APIer.

Ny Date Time API i Java 8

Den nye dato-API-en hjelper til med å overvinne ulempene nevnt ovenfor med de eldre klassene. Det inkluderer følgende klasser:

java.time.LocalDate: Den representerer en år-måned-dag i ISO-kalenderen og er nyttig for å representere en dato uten tid. Den kan brukes til å representere kun en datoinformasjon, for eksempel fødselsdato eller bryllupsdato.

java.time.LocalTime: Det handler kun i tid. Det er nyttig for å representere menneskebasert tid på dagen, for eksempel filmtider, eller åpnings- og stengetidene til det lokale biblioteket.

java.time.LocalDateTime: Den håndterer både dato og klokkeslett, uten tidssone. Det er en kombinasjon av LocalDate med LocalTime.

java.time.ZonedDateTime: Den kombinerer LocalDateTime-klassen med soneinformasjonen gitt i ZoneId-klassen. Det representerer et fullstendig datotidsstempel sammen med tidssoneinformasjon.

java.time.OffsetTime: Den håndterer tid med en tilsvarende tidssoneforskyvning fra Greenwich/UTC, uten tidssone-ID.

java.time.OffsetDateTime: Den håndterer en dato og tid med en tilsvarende tidssoneforskyvning fra Greenwich/UTC, uten tidssone-ID.

java.time.Clock : Den gir tilgang til gjeldende øyeblikk, dato og klokkeslett i en gitt tidssone. Selv om bruken av klokkeklassen er valgfri, lar denne funksjonen oss teste koden din for andre tidssoner, eller ved å bruke en fast klokke, der tiden ikke endres.

java.time.Instant : Det representerer starten på et nanosekund på tidslinjen (siden EPOCH) og nyttig for å generere et tidsstempel for å representere maskintid. Et øyeblikk som inntreffer før epoken har en negativ verdi, og et øyeblikk som inntreffer etter epoken har en positiv verdi.

java.time.Varighet : Forskjellen mellom to øyeblikk og målt i sekunder eller nanosekunder og bruker ikke datobaserte konstruksjoner som år, måneder og dager, selv om klassen gir metoder som konverterer til dager, timer og minutter.

java.time.Period : Den brukes til å definere forskjellen mellom datoer i datobaserte verdier (år, måneder, dager).

java.time.ZoneId : Den angir en tidssone-identifikator og gir regler for konvertering mellom en Instant og en LocalDateTime.

java.time.ZoneOffset : Den beskriver en tidssoneforskyvning fra Greenwich/UTC-tid.

java.time.format.DateTimeFormatter : Den kommer opp med forskjellige forhåndsdefinerte formatere, eller vi kan definere vår egen. Den har metoden parse() eller format() for å analysere og formatere dato- og klokkeslettverdiene.