Få den aktuelle dato inden Java 8

1. Introduktion

I ældre systemer skal vi muligvis arbejde med datoer, hvor hverken den nye dato og tid API eller det stærkt anbefalede Joda-Time-bibliotek er tilgængelig.

I denne korte vejledning skal vi se på flere tilgange for at se hvordan man får den aktuelle dato i pre-Java 8-systemer.

2. Systemtid

Når alt, hvad vi har brug for, er en enkelt numerisk værdi, der repræsenterer den aktuelle dato og tid, kan vi bruge systemtiden. For at få antallet af millisekunder gået siden 1. januar 1970 00:00:00 GMT vi kan bruge currentTimeMillis metode, der returnerer en lang:

long elapsedMilliseconds = System.currentTimeMillis ();

Når vi vil måle forløbet tid med større præcision, kan vi bruge nanoTime metode. Dette returnerer værdien af ​​nanosekunder, der er gået fra et fast, men vilkårligt øjeblik.

Denne vilkårlige tid er den samme for alle opkald inde i JVM, så den returnerede værdi er kun nyttig til beregning af forskellen i forløbne nanosekunder mellem flere opkald på nanoTime:

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

3. Den java.util Pakke

Brug af klasser fra java.util pakke, kan vi repræsentere et øjeblik i tiden, normalt med de forløbne millisekunder siden 1. januar 1970 00:00:00 GMT.

3.1. java.util.Date

Vi kan repræsentere en bestemt dato og et klokkeslæt ved hjælp af en Dato objekt. Dette indeholder en præcision på millisekunder og tidszoneoplysningerne.

Mens der er mange konstruktører til rådighed, er den enkleste måde at skabe et Dato objekt, der repræsenterer den aktuelle dato i den lokale tidszone, er at bruge den grundlæggende konstruktør:

Dato currentUtilDate = ny dato ();

Lad os nu oprette en Dato objekt for en bestemt dato og et bestemt tidspunkt. Vi kunne bruge de førnævnte konstruktører og blot overføre millisekundværdien.

Alternativt kan vi bruge SimpleDateFormat klasse til at konvertere en Snor værdi til en faktisk Dato objekt:

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

Vi kan bruge en bred vifte af datomønstre, der passer til vores behov.

3.2. java.util.Kalender

EN Kalender objekt kan gøre hvad en Dato gør, og det er det bedre til dataritmetiske beregninger, da det også kan tage en Lokal. Vi kan specificere Lokal som en geografisk, politisk eller kulturel region.

For at få den aktuelle dato uden nr Tidszone eller Lokal specificeret, kan vi bruge getInstance metode:

Kalender currentUtilCalendar = Calendar.getInstance ();

Og for Kalender til Dato konvertering, kan vi simpelthen bruge getTime metode:

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

Som en sjov kendsgerning, Gregoriansk kalender klasse er implementeringen af ​​den mest anvendte kalender i verden.

4. Den java.sql Pakke

Dernæst undersøger vi tre udvidelser af java.util.Date klasse, der repræsenterer de tilsvarende SQL-objekter.

4.1. java.sql.dato

Med en java.sql.dato objekt, vi har ikke adgang til tidszoneoplysninger, og præcisionen afkortes på dagniveau. For at repræsentere i dag kan vi bruge konstruktøren, der tager en lang repræsentation af millisekunder:

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

Som før, til en bestemt dato, kan vi bruge SimpleDateFormat klasse til at konvertere til en java.util.Date først og derefter få millisekunder ved hjælp af getTime metode. Derefter kan vi videregive denne værdi til java.sql.dato konstruktør.

Vi kan simpelthen bruge Værdi af metode, når Snor repræsentation af en Dato matcher åååå- [m] m- [d] d mønster:

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

4.2. java.sql.Tid

Det java.sql.Tid objekt tilbud adgang til oplysningerne om time, minut og anden - endnu en gang uden adgang til en tidszone. Lad os få strømmen Tid ved hjælp af repræsentation af millisekunder:

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

For at specificere et tidspunkt ved hjælp af Værdi af metode, kan vi sende en værdi, der matcher tt: mm: ss mønster:

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

4.3. java.sql.Tidsstempel

I dette sidste afsnit kombinerer vi både SQL Dato og Tid oplysninger ved hjælp af Tidsstempel klasse. Dette giver os mulighed for at have præcision ned til nanosekunder.

Lad os oprette en Tidsstempel genstand ved igen at passere en lang værdi for det aktuelle antal millisekunder til konstruktøren:

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

Lad os endelig oprette en ny brugerdefineret Tidsstempel bruger Værdi af metode med det krævede åååå- [m] m- [d] d tt: mm: ss [.f…] mønster:

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

5. Konklusion

I denne korte vejledning har vi set, hvordan man får den aktuelle dato og datoen for et givet øjeblik uden brug af Java 8 eller eksterne biblioteker.

Som altid er artiklens kode tilgængelig på GitHub.