logo

Java datum och tid

Paketen java.time, java.util, java.sql och java.text innehåller klasser för att representera datum och tid. Följande klasser är viktiga för att hantera datum i Java.

Java 8 Date/Time API

Java har introducerat ett nytt Date and Time API sedan Java 8. Java.time-paketet innehåller Java 8 Date and Time-klasser.

Klassiskt datum/tid API

Men klassisk eller gammal Java Date API är också användbar. Låt oss se listan över klassiska datum- och tidsklasser.

Formatera datum och tid

Vi kan formatera datum och tid i Java genom att använda följande klasser:

Java-API:er för datum och tid

Java tillhandahåller datum- och tidsfunktionalitet med hjälp av två paket java.time och java.util. Paketet java.time introduceras i Java 8, och de nyligen introducerade klasserna försöker övervinna bristerna i de äldre klasserna java.util.Date och java.util.Calendar.

Klassiska datum och tid API-klasser

De primära klasserna innan Java 8 släpptes var:

hur man laddar ner musik

Java.lang.System: Klassen tillhandahåller metoden currentTimeMillis() som returnerar den aktuella tiden i millisekunder. Den visar aktuellt datum och tid i millisekunder från 1 januari 1970.

java.util.Date: Den används för att visa ett visst ögonblick av tid, med enheten millisekund.

java.util.Calendar: Det är en abstrakt klass som tillhandahåller metoder för att konvertera mellan instanser och manipulera kalenderfälten på olika sätt.

java.text.SimpleDateFormat: Det är en klass som används för att formatera och analysera datumen på ett fördefinierat sätt eller användardefinierat mönster.

java.util.TimeZone: Den representerar en tidszonförskjutning och räknar även ut sommartid.

Nackdelar med befintliga Date/Time API: er

    Trådsäkerhet:De befintliga klasserna som datum och kalender ger inte trådsäkerhet. Därför leder det till svårfelsökta samtidighetsproblem som måste tas om hand av utvecklare. De nya API:erna för datum och tid i Java 8 ger trådsäkerhet och är oföränderliga, vilket undviker samtidighetsproblemet från utvecklare.Dålig API-design:De klassiska API:erna för datum och kalender tillhandahåller inga metoder för att utföra grundläggande dagliga funktioner. Datum- och tidsklasserna som introduceras i Java 8 är ISO-centrerade och ger ett antal olika metoder för att utföra operationer avseende datum, tid, varaktighet och perioder.Svår tidszonshantering:Att hantera tidszonen med klassiska datum- och kalenderklasser är svårt eftersom utvecklarna var tänkta att skriva logiken för det. Med de nya API:erna kan tidszonshanteringen enkelt göras med Local och ZonedDate/Time API:er.

Ny Date Time API i Java 8

Det nya date API hjälper till att övervinna nackdelarna som nämns ovan med de äldre klasserna. Den innehåller följande klasser:

java.time.LocalDate: Den representerar en år-månad-dag i ISO-kalendern och är användbar för att representera ett datum utan tid. Den kan användas för att endast representera information om ett datum, såsom ett födelsedatum eller bröllopsdatum.

java.time.LocalTime: Det handlar bara i tid. Det är användbart för att representera människobaserad tid på dygnet, som filmtider, eller öppnings- och stängningstiderna för det lokala biblioteket.

java.time.LocalDateTime: Den hanterar både datum och tid, utan tidszon. Det är en kombination av LocalDate med LocalTime.

java.time.ZonedDateTime: Den kombinerar klassen LocalDateTime med zoninformationen som ges i klassen ZoneId. Den representerar en komplett datumtidsstämpel tillsammans med tidszoninformation.

java.time.OffsetTime: Den hanterar tid med motsvarande tidszonsförskjutning från Greenwich/UTC, utan tidszons-ID.

java.time.OffsetDateTime: Den hanterar ett datum och en tid med motsvarande tidszonsförskjutning från Greenwich/UTC, utan tidszons-ID.

java.time.Clock : Det ger tillgång till det aktuella ögonblicket, datum och tid i en given tidszon. Även om användningen av klassen Klocka är valfri, tillåter den här funktionen oss att testa din kod för andra tidszoner, eller genom att använda en fast klocka, där tiden inte ändras.

java.time.Instant : Den representerar början på en nanosekund på tidslinjen (sedan EPOCH) och användbar för att generera en tidsstämpel som representerar maskintid. Ett ögonblick som inträffar före epoken har ett negativt värde och ett ögonblick som inträffar efter epoken har ett positivt värde.

java.time.Duration : Skillnaden mellan två ögonblick och mäts i sekunder eller nanosekunder och använder inte datumbaserade konstruktioner som år, månader och dagar, även om klassen tillhandahåller metoder som konverterar till dagar, timmar och minuter.

java.time.Period : Den används för att definiera skillnaden mellan datum i datumbaserade värden (år, månader, dagar).

java.time.ZoneId : Den anger en tidszonsidentifierare och tillhandahåller regler för konvertering mellan en Instant och en LocalDateTime.

java.time.ZoneOffset : Den beskriver en tidszonsförskjutning från Greenwich/UTC-tid.

java.time.format.DateTimeFormatter : Den kommer med olika fördefinierade formatterare, eller så kan vi definiera vår egen. Den har metoden parse() eller format() för att analysera och formatera datum- och tidsvärden.