logo

Java-datum en -tijd

De pakketten java.time, java.util, java.sql en java.text bevatten klassen voor het weergeven van datum en tijd. De volgende klassen zijn belangrijk voor het omgaan met datum in Java.

Java 8 Datum/tijd-API

Java heeft sinds Java 8 een nieuwe Datum- en Tijd-API geïntroduceerd. Het java.time-pakket bevat Java 8 Datum- en Tijdklassen.

Klassieke datum/tijd-API

Maar klassieke of oude Java Date API is ook handig. Laten we de lijst met klassieke datum- en tijdklassen bekijken.

Datum en tijd opmaken

We kunnen datum en tijd in Java opmaken door de volgende klassen te gebruiken:

Java-API's voor datum en tijd

Java biedt de datum- en tijdfunctionaliteit met behulp van twee pakketten java.time en java.util. Het pakket java.time wordt geïntroduceerd in Java 8, en de nieuw geïntroduceerde klassen proberen de tekortkomingen van de oudere klassen java.util.Date en java.util.Calendar te overwinnen.

Klassieke datum-tijd-API-klassen

De primaire klassen vóór de release van Java 8 waren:

aanwijzingen in c

Java.lang.Systeem: De klasse biedt de methode currentTimeMillis() die de huidige tijd in milliseconden retourneert. Het toont de huidige datum en tijd in milliseconden vanaf 1 januari 1970.

java.util.Datum: Het wordt gebruikt om een ​​specifiek tijdstip weer te geven, met de eenheid milliseconde.

java.util.Kalender: Het is een abstracte klasse die methoden biedt voor het converteren tussen exemplaren en het op verschillende manieren manipuleren van de kalendervelden.

java.text.SimpleDateFormat: Het is een klasse die wordt gebruikt om de datums op een vooraf gedefinieerde manier of door de gebruiker gedefinieerd patroon op te maken en te ontleden.

java.util.TimeZone: Het vertegenwoordigt een tijdzoneverschuiving en berekent ook de zomertijd.

Nadelen van bestaande Date/Time API's

    Draadveiligheid:De bestaande klassen zoals Datum en Kalender bieden geen draadveiligheid. Daarom leidt het tot moeilijk te debuggen gelijktijdigheidsproblemen die door ontwikkelaars moeten worden opgelost. De nieuwe Date and Time API's van Java 8 bieden threadveiligheid en zijn onveranderlijk, waardoor het gelijktijdigheidsprobleem van ontwikkelaars wordt vermeden.Slecht API-ontwerp:De klassieke Datum- en Kalender-API's bieden geen methoden om dagelijkse basisfunctionaliteiten uit te voeren. De Date- en Time-klassen die in Java 8 zijn geïntroduceerd, zijn ISO-centrisch en bieden een aantal verschillende methoden voor het uitvoeren van bewerkingen met betrekking tot datum, tijd, duur en perioden.Moeilijke afhandeling van tijdzones:Het is moeilijk om met de tijdzone om te gaan met behulp van de klassieke Date- en Calendar-klassen, omdat de ontwikkelaars de logica ervoor moesten schrijven. Met de nieuwe API's kan de tijdzoneafhandeling eenvoudig worden gedaan met Local en ZonedDate/Time API's.

Nieuwe Datum Tijd-API in Java 8

De nieuwe datum-API helpt de bovengenoemde nadelen met de oudere klassen te overwinnen. Het omvat de volgende klassen:

java.time.LocalDate: Het vertegenwoordigt een jaar-maand-dag in de ISO-kalender en is handig voor het weergeven van een datum zonder tijd. Het kan worden gebruikt om alleen datuminformatie weer te geven, zoals een geboortedatum of trouwdatum.

java.time.LocalTime: Er wordt alleen in de tijd gehandeld. Het is handig voor het weergeven van op mensen gebaseerde tijden van de dag, zoals filmtijden of de openings- en sluitingstijden van de plaatselijke bibliotheek.

java.time.LocalDateTime: Het verwerkt zowel datum als tijd, zonder tijdzone. Het is een combinatie van LocalDate met LocalTime.

java.time.ZonedDateTime: Het combineert de klasse LocalDateTime met de zone-informatie die wordt gegeven in de klasse ZoneId. Het vertegenwoordigt een volledige datum-tijdstempel samen met tijdzone-informatie.

java.time.OffsetTime: Het verwerkt de tijd met een overeenkomstige tijdzoneafwijking ten opzichte van Greenwich/UTC, zonder tijdzone-ID.

java.time.OffsetDateTime: Het verwerkt een datum en tijd met een overeenkomstige tijdzoneafwijking ten opzichte van Greenwich/UTC, zonder tijdzone-ID.

java.time.Klok: Het biedt toegang tot het huidige moment, de datum en de tijd in een bepaalde tijdzone. Hoewel het gebruik van de klasse Clock optioneel is, stelt deze functie ons in staat uw code te testen voor andere tijdzones, of door een vaste klok te gebruiken, waarbij de tijd niet verandert.

java.time.Instant: Het vertegenwoordigt het begin van een nanoseconde op de tijdlijn (sinds EPOCH) en is nuttig voor het genereren van een tijdstempel om de machinetijd weer te geven. Een moment dat vóór het tijdperk plaatsvindt, heeft een negatieve waarde, en een moment dat na het tijdperk plaatsvindt, heeft een positieve waarde.

java.time.Duur: Het verschil tussen twee momenten wordt gemeten in seconden of nanoseconden en er wordt geen gebruik gemaakt van datumgebaseerde constructies zoals jaren, maanden en dagen, hoewel de klasse methoden biedt die worden omgezet in dagen, uren en minuten.

java.time.Period : Het wordt gebruikt om het verschil tussen datums in op datums gebaseerde waarden (jaren, maanden, dagen) te definiëren.

java.time.ZoneId: Het vermeldt een tijdzone-ID en biedt regels voor het converteren tussen een Instant en een LocalDateTime.

java.time.ZoneOffset : Het beschrijft een tijdzoneafwijking ten opzichte van Greenwich/UTC-tijd.

java.time.format.DateTimeFormatter : Het komt met verschillende vooraf gedefinieerde formatters, of we kunnen onze eigen formatteren. Het heeft een parse()- of format()-methode voor het parseren en opmaken van de datum-tijdwaarden.