logo

Java dato og tid

Pakkerne java.time, java.util, java.sql og java.text indeholder klasser til at repræsentere dato og klokkeslæt. Følgende klasser er vigtige for at håndtere dato i Java.

Java 8 Dato/Time API

Java har introduceret en ny Date and Time API siden Java 8. Java.time-pakken indeholder Java 8 Date and Time klasser.

Klassisk dato/klokkeslæt API

Men klassisk eller gammel Java Date API er også nyttig. Lad os se listen over klassiske dato- og tidsklasser.

Formatering af dato og tid

Vi kan formatere dato og klokkeslæt i Java ved at bruge følgende klasser:

Java Date and Time API'er

Java leverer dato og klokkeslæt funktionalitet ved hjælp af to pakker java.time og java.util. Pakken java.time er introduceret i Java 8, og de nyligt introducerede klasser forsøger at overvinde manglerne i de gamle java.util.Date og java.util.Calendar klasser.

Klassiske Dato Tid API klasser

De primære klasser før udgivelsen af ​​Java 8 var:

min max

Java.lang.System: Klassen giver metoden currentTimeMillis() der returnerer den aktuelle tid i millisekunder. Den viser den aktuelle dato og tid i millisekunder fra 1. januar 1970.

java.util.Dato: Det bruges til at vise et bestemt tidspunkt med en enhed på millisekund.

java.util.Calendar: Det er en abstrakt klasse, der giver metoder til at konvertere mellem instanser og manipulere kalenderfelterne på forskellige måder.

java.text.SimpleDateFormat: Det er en klasse, der bruges til at formatere og parse datoerne på en foruddefineret måde eller brugerdefineret mønster.

java.util.TimeZone: Det repræsenterer en tidszoneforskydning og regner også ud med sommertid.

Ulemper ved eksisterende Dato/Time API'er

    Trådsikkerhed:De eksisterende klasser såsom Dato og Kalender giver ikke trådsikkerhed. Derfor fører det til samtidighedsproblemer, der er svære at fejlfinde, der skal tages hånd om af udviklere. De nye Date and Time API'er i Java 8 giver trådsikkerhed og er uforanderlige og undgår dermed samtidighedsproblemet fra udviklere.Dårlig API-design:De klassiske dato- og kalender-API'er giver ikke metoder til at udføre grundlæggende daglige funktioner. Dato- og tidsklasserne introduceret i Java 8 er ISO-centrerede og giver en række forskellige metoder til at udføre operationer vedrørende dato, klokkeslæt, varighed og perioder.Svær tidszonehåndtering:At håndtere tidszonen ved hjælp af klassiske dato- og kalenderklasser er svært, fordi udviklerne skulle skrive logikken for det. Med de nye API'er kan tidszonehåndteringen nemt udføres med Local og ZonedDate/Time API'er.

Ny Date Time API i Java 8

Den nye date API hjælper med at overvinde de ovennævnte ulemper med de ældre klasser. Det inkluderer følgende klasser:

java.time.LocalDate: Det repræsenterer en år-måned-dag i ISO-kalenderen og er nyttig til at repræsentere en dato uden et tidspunkt. Det kan bruges til kun at repræsentere en dato information, såsom en fødselsdato eller bryllupsdato.

java.time.LocalTime: Det handler kun i tide. Det er nyttigt til at repræsentere menneskebaserede tidspunkter på dagen, såsom filmtider eller åbnings- og lukketider for det lokale bibliotek.

java.time.LocalDateTime: Den håndterer både dato og klokkeslæt uden en tidszone. Det er en kombination af LocalDate med LocalTime.

java.time.ZonedDateTime: Den kombinerer LocalDateTime-klassen med zoneinformationen givet i ZoneId-klassen. Det repræsenterer et komplet dato-tidsstempel sammen med tidszoneoplysninger.

java.time.OffsetTime: Den håndterer tid med en tilsvarende tidszoneforskydning fra Greenwich/UTC, uden tidszone-id.

java.time.OffsetDateTime: Den håndterer en dato og et klokkeslæt med en tilsvarende tidszoneforskydning fra Greenwich/UTC, uden et tidszone-id.

java.time.Clock: Det giver adgang til det aktuelle øjeblik, dato og klokkeslæt i en given tidszone. Selvom brugen af ​​Ur-klassen er valgfri, giver denne funktion os mulighed for at teste din kode for andre tidszoner, eller ved at bruge et fast ur, hvor tiden ikke ændrer sig.

java.time.Instant : Det repræsenterer starten på et nanosekund på tidslinjen (siden EPOCH) og nyttigt til at generere et tidsstempel til at repræsentere maskintid. Et øjeblik, der opstår før epoken, har en negativ værdi, og et øjeblik, der opstår efter epoken, har en positiv værdi.

java.time.Varighed: Forskellen mellem to øjeblikke og målt i sekunder eller nanosekunder og bruger ikke dato-baserede konstruktioner såsom år, måneder og dage, selvom klassen giver metoder, der konverterer til dage, timer og minutter.

java.time.Periode : Det bruges til at definere forskellen mellem datoer i datobaserede værdier (år, måneder, dage).

java.time.ZoneId : Den angiver en tidszone-id og giver regler for konvertering mellem en Instant og en LocalDateTime.

java.time.ZoneOffset : Den beskriver en tidszone offset fra Greenwich/UTC tid.

java.time.format.DateTimeFormatter : Det kommer op med forskellige foruddefinerede formattere, eller vi kan definere vores eget. Den har parse() eller format() metode til at parse og formatere dato-tidsværdierne.