logo

Java päivämäärä ja aika

Paketit java.time, java.util, java.sql ja java.text sisältävät luokat päivämäärän ja ajan esittämiseksi. Seuraavat luokat ovat tärkeitä päivämäärän käsittelyssä Javassa.

Java 8 Date/Time API

Java on ottanut käyttöön uuden Date and Time API:n Java 8:n jälkeen. Java.time-paketti sisältää Java 8 Date and Time -luokat.

Klassinen päivämäärä/aika API

Mutta klassinen tai vanha Java Date API on myös hyödyllinen. Katsotaanpa klassisten päivämäärä- ja aikaluokkien luetteloa.

Päivämäärän ja kellonajan muotoilu

Voimme muotoilla päivämäärän ja ajan Javassa käyttämällä seuraavia luokkia:

Java Date and Time API:t

Java tarjoaa päivämäärä- ja aikatoiminnot kahden paketin java.time ja java.util avulla. Paketti java.time on otettu käyttöön Java 8:ssa, ja uudet luokat yrittävät voittaa vanhojen java.util.Date- ja java.util.Calendar-luokkien puutteet.

Klassiset Date Time -sovellusliittymäluokat

Ensiluokkaiset luokat ennen Java 8 -julkaisua olivat:

kuinka käyttää mysql-työpöytää

Java.lang.System: Luokka tarjoaa currentTimeMillis()-metodin, joka palauttaa nykyisen ajan millisekunteina. Se näyttää nykyisen päivämäärän ja ajan millisekunteina 1. tammikuuta 1970 alkaen.

java.util.Date: Sitä käytetään tietyn ajan hetken näyttämiseen millisekunnin yksiköllä.

java.util.Kalenteri: Se on abstrakti luokka, joka tarjoaa menetelmiä muuntamiseen esiintymien välillä ja kalenterikenttien käsittelyyn eri tavoin.

java.text.SimpleDateFormat: Se on luokka, jota käytetään muotoilemaan ja jäsentämään päivämäärät ennalta määritetyllä tavalla tai käyttäjän määrittelemällä mallilla.

java.util.TimeZone: Se edustaa aikavyöhykkeen siirtymää ja laskee myös kesäajan.

Nykyisten Date/Time API:iden haitat

    Langan turvallisuus:Nykyiset luokat, kuten päivämäärä ja kalenteri, eivät tarjoa lankaturvaa. Siksi se johtaa vaikeasti korjattaviin samanaikaisuusongelmiin, joista kehittäjien on huolehdittava. Java 8:n uudet päivämäärä- ja aikarajapinnat tarjoavat säikeen turvallisuuden ja ovat muuttumattomia, mikä välttää kehittäjien samanaikaisuusongelman.Huono API-suunnittelu:Klassiset päivämäärä- ja kalenterisovellusliittymät eivät tarjoa menetelmiä päivittäisten perustoimintojen suorittamiseen. Java 8:ssa käyttöönotetut Date- ja Time-luokat ovat ISO-keskeisiä ja tarjoavat useita erilaisia ​​menetelmiä päivämäärän, ajan, keston ja jaksojen suorittamiseen.Vaikea aikavyöhykkeen käsittely:Aikavyöhykkeen käsitteleminen perinteisillä Päivämäärä- ja Kalenteri-luokilla on vaikeaa, koska kehittäjien piti kirjoittaa sille logiikka. Uusien sovellusliittymien avulla aikavyöhykkeen käsittely voidaan tehdä helposti paikallisilla ja ZonedDate/Time API:illa.

Uusi Date Time API Java 8:ssa

Uusi päivämääräsovellusliittymä auttaa voittamaan yllä mainitut haitat vanhojen luokkien kanssa. Se sisältää seuraavat luokat:

java.time.LocalDate: Se edustaa vuotta-kuukausi-päivää ISO-kalenterissa ja on hyödyllinen päivämäärän esittämiseen ilman aikaa. Sitä voidaan käyttää edustamaan vain päivämäärätietoja, kuten syntymäaikaa tai hääpäivää.

java.time.LocalTime: Se toimii vain ajallaan. Se on hyödyllinen kuvaamaan ihmispohjaisia ​​kellonaikoja, kuten elokuvaaikoja tai paikallisen kirjaston aukiolo- ja sulkemisaikoja.

java.time.LocalDateTime: Se käsittelee sekä päivämäärän että kellonajan ilman aikavyöhykettä. Se on LocalDate:n ja LocalTimen yhdistelmä.

java.time.ZonedDateTime: Se yhdistää LocalDateTime-luokan ZoneId-luokassa annettuihin vyöhyketietoihin. Se edustaa täydellistä päivämäärä-aikaleimaa sekä aikavyöhyketietoja.

java.time.OffsetTime: Se käsittelee aikaa vastaavalla aikavyöhykesiirrolla Greenwich/UTC:stä ilman aikavyöhyketunnusta.

java.time.OffsetDateTime: Se käsittelee päivämäärän ja kellonajan vastaavan aikavyöhykkeen poikkeamana Greenwich/UTC:sta ilman aikavyöhyketunnusta.

java.time.Clock : Se tarjoaa pääsyn nykyiseen hetkeen, päivämäärään ja kellonaikaan millä tahansa aikavyöhykkeellä. Vaikka Kello-luokan käyttö on valinnaista, tämän ominaisuuden avulla voimme testata koodiasi muille aikavyöhykkeille tai käyttämällä kiinteää kelloa, jossa aika ei muutu.

java.time.Instant : Se edustaa nanosekunnin alkua aikajanalla (EPOCH:sta lähtien) ja on hyödyllinen aikaleiman luomiseen koneaikaa kuvaamaan. Hetkellä, joka tapahtuu ennen epookkia, on negatiivinen arvo ja hetkellä, joka tapahtuu aikakauden jälkeen, on positiivinen arvo.

java.time.Duration : Kahden hetken ero mitataan sekunteina tai nanosekunteina, eikä siinä käytetä päivämääräpohjaisia ​​rakenteita, kuten vuosia, kuukausia ja päiviä, vaikka luokka tarjoaa menetelmiä, jotka muunnetaan päiviksi, tunteiksi ja minuutteiksi.

java.time.Period : Sitä käytetään päivämäärän välisten erojen määrittämiseen päivämääräperusteisissa arvoissa (vuodet, kuukaudet, päivät).

java.time.ZoneId : Se ilmoittaa aikavyöhykkeen tunnisteen ja antaa säännöt muuntamiseen Instant- ja LocalDateTime-ajan välillä.

java.time.ZoneOffset: Se kuvaa aikavyöhykkeen poikkeamaa Greenwichin/UTC-ajasta.

java.time.format.DateTimeFormatter: Se sisältää erilaisia ​​ennalta määritettyjä muotoilijoita, tai voimme määrittää oman. Siinä on parse()- tai format()-menetelmä päivämäärä-aika-arvojen jäsentämiseen ja muotoiluun.