Få den gjeldende datoen før Java 8

1. Introduksjon

I eldre systemer kan det hende vi trenger å jobbe med datoer når verken den nye API-en for dato og tid eller det sterkt anbefalte Joda-Time-biblioteket er tilgjengelig.

I denne korte opplæringen skal vi se på flere tilnærminger å se hvordan du får den gjeldende datoen i pre-Java 8-systemer.

2. Systemtid

Når alt vi trenger er en enkelt numerisk verdi som representerer gjeldende dato og klokkeslett, kan vi bruke systemtiden. For å få passert antall millisekunder siden 1. januar 1970 00:00:00 GMT vi kan bruke currentTimeMillis metode som returnerer a lang:

long elapsedMilliseconds = System.currentTimeMillis ();

Når vi vil måle forløpt tid med større presisjon, kan vi bruke nanoTime metode. Dette vil returnere verdien av nanosekunder som har gått fra et fast, men vilkårlig øyeblikk.

Denne vilkårlige tiden er den samme for alle samtaler i JVM, så verdien som returneres er bare nyttig for å beregne forskjellen i forløpte nanosekunder mellom flere samtaler på nanoTime:

long elapsedNanosecondsStart = System.nanoTime (); long elapsedNanoseconds = System.nanoTime () - elapsedNanosecondsStart;

3. Den java.util Pakke

Bruke klasser fra java.util pakke, kan vi representere et øyeblikk i tid, vanligvis med millisekundene som har gått siden 1. januar 1970 00:00:00 GMT.

3.1. java.util.Date

Vi kan representere en bestemt dato og tid ved å bruke a Dato gjenstand. Dette inneholder en presisjon på millisekunder og informasjon om tidssonen.

Mens det er mange konstruktører tilgjengelig, er den enkleste måten å lage en Dato objektet som representerer den gjeldende datoen i den lokale tidssonen, er å bruke den grunnleggende konstruktøren:

Dato currentUtilDate = ny dato ();

La oss nå lage en Dato objekt for en bestemt dato og tid. Vi kunne bruke de nevnte konstruktørene og bare overføre millisekundeverdien.

Alternativt kan vi bruke SimpleDateFormat klasse for å konvertere en String verdi til en faktisk Dato gjenstand:

SimpleDateFormat dateFormatter = ny SimpleDateFormat ("dd-MM-åååå HH: mm: ss"); Dato customUtilDate = dateFormatter.parse ("30-01-2020 10:11:12");

Vi kan bruke et bredt spekter av datomønstre som passer våre behov.

3.2. java.util.Kalender

EN Kalender objekt kan gjøre hva en Dato gjør, og det er det bedre for dataritmetiske beregninger siden det også kan ta en Lokal. Vi kan spesifisere Lokal som en geografisk, politisk eller kulturell region.

For å få gjeldende dato, med nr Tidssone eller Lokal spesifisert, kan vi bruke getInstance metode:

Calendar currentUtilCalendar = Calendar.getInstance ();

Og for Kalender til Dato konvertering, kan vi ganske enkelt bruke getTime metode:

Dato currentDate = Calendar.getInstance (). GetTime ();

Som et morsomt faktum, Gregorianske kalender klasse er implementeringen av den mest brukte kalenderen i verden.

4. Den java.sql Pakke

Deretter vil vi utforske tre utvidelser av java.util.Date klasse som representerer tilsvarende SQL-objekter.

4.1. java.sql.dato

Med en java.sql.dato gjenstand, vi har ikke tilgang til tidssoneinformasjon, og presisjonen blir avkortet på dagsnivå. For å representere i dag kan vi bruke konstruktøren som tar en lang representasjon av millisekunder:

Dato currentSqlDate = ny dato (System.currentTimeMillis ());

Som før, for en bestemt dato, kan vi bruke SimpleDateFormat klasse for å konvertere til en java.util.Date først og deretter få millisekundene ved hjelp av getTime metode. Deretter kan vi overføre denne verdien til java.sql.dato konstruktør.

Vi kan ganske enkelt bruke verdien av metoden når String representasjon av en Dato samsvarer med åååå- [m] m- [d] d mønster:

Dato customSqlDate = Date.valueOf ("2020-01-30");

4.2. java.sql.Time

De java.sql.Time objektet tilbyr tilgang til informasjon om time, minutt og sekund - nok en gang, uten tilgang til en tidssone. La oss få strømmen Tid bruker representasjon av millisekunder:

Time currentSqlTime = ny tid (System.currentTimeMillis ());

For å spesifisere et tidspunkt ved hjelp av verdien av metode, kan vi sende inn en verdi som samsvarer med tt: mm: ss mønster:

Tid customSqlTime = Time.valueOf ("10:11:12");

4.3. java.sql.Tidsstempel

I denne siste delen vil vi kombinere både SQL Dato og Tid informasjon ved hjelp av Tidsstempel klasse. Dette tillater oss å ha presisjon ned til nanosekunder.

La oss lage en Tidsstempel gjenstand ved å passere en gang til lang verdi for gjeldende antall millisekunder til konstruktøren:

Tidsstempel currentSqlTimestamp = ny tidsstempel (System.currentTimeMillis ());

Til slutt, la oss lage en ny tilpasset Tidsstempel bruker verdien av metoden med det nødvendige åååå- [m] m- [d] d tt: mm: ss [.f…] mønster:

Tidsstempel customSqlTimestamp = Tidsstempel.valueOf ("2020-1-30 10: 11: 12.123456789");

5. Konklusjon

I denne korte opplæringen har vi sett hvordan du kan få den nåværende datoen og datoen for et gitt øyeblikk uten bruk av Java 8 eller noen eksterne biblioteker.

Som alltid er koden for artikkelen tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found