Dohvatite trenutni datum prije Java 8

1. Uvod

U naslijeđenim sustavima možda ćemo trebati raditi s datumima kada nisu dostupni niti novi API za datum i vrijeme niti visoko preporučena Joda-Time knjižnica.

U ovom kratkom uputstvu ćemo pogledati nekoliko pristupa kako bismo ih vidjeli kako dobiti trenutni datum u sustavima prije Java 8.

2. Vrijeme sustava

Kad nam je potrebna samo jedna numerička vrijednost koja predstavlja trenutni datum i vrijeme, možemo koristiti sistemsko vrijeme. Da biste dobili broj milisekundi proteklih od 1. siječnja 1970. 00:00:00 GMT možemo koristiti currentTimeMillis metoda koja vraća a dugo:

dugo protekloMilisekunde = System.currentTimeMillis ();

Kada želimo mjeriti proteklo vrijeme s većom preciznošću, možemo koristiti nanoTime metoda. To će vratiti vrijednost nanosekundi koje su prošle od određenog, ali proizvoljnog trenutka.

Ovo proizvoljno vrijeme je isto za sve pozive unutar JVM-a, pa je vraćena vrijednost korisna samo za izračunavanje razlike u proteklim nanosekundama između višestrukih poziva nanoTime:

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

3. The java.util Paket

Korištenje predavanja iz java.util paket, možemo predstavljati trenutak u vremenu, obično u milisekundama proteklim od 1. siječnja 1970. 00:00:00 GMT.

3.1. java.util.Datum

Pomoću a možemo predstaviti određeni datum i vrijeme Datum objekt. Sadrži preciznost milisekundi i podatke o vremenskoj zoni.

Iako je na raspolaganju mnogo konstruktora, najjednostavniji način za stvaranje a Datum objekt koji predstavlja trenutni datum u lokalnoj vremenskoj zoni je korištenje osnovnog konstruktora:

Datum currentUtilDate = novi datum ();

Stvorimo sada Datum objekt za određeni datum i vrijeme. Mogli bismo upotrijebiti gore spomenute konstruktore i jednostavno prenijeti vrijednost u milisekundama.

Alternativno, možemo koristiti SimpleDateFormat razred za pretvorbu a Niz vrijednost na stvarni Datum objekt:

SimpleDateFormat dateFormatter = novi SimpleDateFormat ("dd-MM-yyyy HH: mm: ss"); Datum customUtilDate = dateFormatter.parse ("30-01-2020 10:11:12");

Možemo koristiti širok raspon uzoraka datuma koji odgovaraju našim potrebama.

3.2. java.util.Kalendar

A Kalendar objekt može učiniti ono što a Datum radi, i to je bolje za aritmetička izračunavanja datuma, jer također može potrajati i Lokalno. Možemo odrediti Lokalno kao zemljopisna, politička ili kulturna regija.

Da biste dobili trenutni datum, s br Vremenska zona ili Lokalno navedeno, možemo koristiti getInstance metoda:

Kalendar currentUtilCalendar = Calendar.getInstance ();

I za Kalendar do Datum pretvorbu, možemo jednostavno koristiti getTime metoda:

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

Kao zabavna činjenica, Gregorijanski kalendar klasa je provedba najčešće korištenog kalendara na svijetu.

4. The java.sql Paket

Dalje ćemo istražiti tri proširenja java.util.Datum klasa koja predstavlja ekvivalentne SQL objekte.

4.1. java.sql.Date

S java.sql.Date objekt, nemamo pristup informacijama o vremenskoj zoni, a preciznost je skraćena na dnevnoj razini. Za predstavljanje danas možemo koristiti konstruktor koji uzima a dugo prikaz milisekundi:

Datum currentSqlDate = novi datum (System.currentTimeMillis ());

Kao i prije, za određeni datum možemo koristiti SimpleDateFormat razred pretvoriti u java.util.Datum prvo, a zatim dobiti milisekunde pomoću getTime metoda. Zatim tu vrijednost možemo proslijediti na java.sql.Date konstruktor.

Jednostavno možemo koristiti vrijednost metoda kada se Niz prikaz a Datum odgovara gggg- [m] m- [d] d uzorak:

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

4.2. java.sql.Vrijeme

The java.sql.Vrijeme ponude objekata pristup informacijama o satu, minuti i sekundi - još jednom, bez pristupa vremenskoj zoni. Uzmimo struju Vrijeme pomoću milisekundnog predstavljanja:

Vrijeme currentSqlTime = novo vrijeme (System.currentTimeMillis ());

Da biste odredili vrijeme pomoću vrijednost metodu, možemo proslijediti vrijednost koja odgovara hh: mm: ss uzorak:

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

4.3. java.sql.Timestamp

U ovom posljednjem odjeljku kombinirat ćemo oba SQL-a Datum i Vrijeme informacije pomoću Vremenska oznaka razred. To nam omogućuje da imamo preciznost do nanosekundi.

Stvorimo a Vremenska oznaka objekt ponovnim dodavanjem a dugo vrijednost za trenutni broj milisekundi konstruktoru:

Vremenska oznaka currentSqlTimestamp = nova vremenska oznaka (System.currentTimeMillis ());

Napokon, kreirajmo novi običaj Vremenska oznaka koristiti vrijednost metoda s potrebnim gggg- [m] m- [d] d hh: mm: ss [.f…] uzorak:

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

5. Zaključak

U ovom kratkom vodiču vidjeli smo kako dobiti trenutni datum i datum za određeni trenutak bez upotrebe Java 8 ili bilo koje vanjske knjižnice.

Kao i uvijek, kôd članka dostupan je na GitHub-u.