Dapatkan Tarikh Semasa Sebelum Java 8

1. Pengenalan

Dalam sistem warisan, kita mungkin perlu bekerja dengan tarikh ketika API tarikh dan waktu baru atau perpustakaan Joda-Time yang sangat disyorkan tidak tersedia.

Dalam tutorial ringkas ini, kita akan melihat beberapa pendekatan untuk melihat bagaimana mendapatkan tarikh terkini dalam sistem pra-Java 8 .

2. Masa Sistem

Apabila semua yang kita perlukan adalah nilai angka tunggal yang mewakili tarikh dan waktu semasa, kita dapat menggunakan waktu sistem. Untuk mendapatkan bilangan milisaat yang dilalui sejak 1 Januari 1970 00:00:00 GMT kita dapat menggunakan kaedah currentTimeMillis yang mengembalikan panjang :

long elapsedMilliseconds = System.currentTimeMillis();

Apabila kita ingin mengukur masa berlalu dengan ketepatan yang lebih besar, kita dapat menggunakan kaedah nanoTime . Ini akan mengembalikan nilai nanodetik yang berlalu dari saat tetap tetapi sewenang-wenangnya.

Waktu sewenang-wenangnya adalah sama untuk semua panggilan di dalam JVM, jadi nilai yang dikembalikan berguna hanya untuk mengira perbezaan dalam nanodetik yang berlalu antara beberapa panggilan nanoTime :

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

3. Pakej java.util

Dengan menggunakan kelas dari pakej java.util , kita dapat menunjukkan momen dalam waktu, biasanya oleh milidetik yang berlalu sejak 1 Januari 1970 00:00:00 GMT .

3.1. java.util.Tarikh

Kita dapat mewakili tarikh dan waktu tertentu dengan menggunakan objek Date . Ini mengandungi ketepatan milisaat dan maklumat zon waktu .

Walaupun terdapat banyak pembina yang ada, cara termudah untuk membuat objek Tarikh yang mewakili tarikh semasa di zon waktu tempatan adalah dengan menggunakan pembina asas:

Date currentUtilDate = new Date();

Sekarang mari kita buat objek Tarikh untuk tarikh dan masa tertentu. Kita boleh menggunakan konstruktor yang disebutkan di atas dan hanya melepasi nilai milisaat.

Sebagai alternatif, kita boleh menggunakan kelas SimpleDateFormat untuk menukar nilai String ke objek Date sebenarnya :

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

Kita boleh menggunakan pelbagai corak tarikh untuk memenuhi keperluan kita.

3.2. java.util.Kalendar

A Kalendar objek boleh melakukan apa yang Tarikh tidak, dan ia adalah lebih baik untuk tarikh pengiraan aritmetik kerana ia juga boleh mengambil Locale . Kita boleh menentukan Locale sebagai sebuah rantau geografi, politik, atau budaya.

Untuk mendapatkan tarikh semasa, tanpa TimeZone atau Locale ditentukan, kita dapat menggunakan kaedah getInstance :

Calendar currentUtilCalendar = Calendar.getInstance();

Dan untuk penukaran Kalendar ke Tarikh , kita hanya boleh menggunakan kaedah getTime :

Date currentDate = Calendar.getInstance().getTime();

Sebagai fakta yang menyeronokkan, kelas GregorianCalendar adalah pelaksanaan kalendar yang paling banyak digunakan di dunia.

4. Pakej java.sql

Seterusnya, kita akan meneroka tiga sambungan kelas java.util.Date yang mewakili objek SQL yang setara.

4.1. java.sql.Tarikh

Dengan objek java.sql.Date , kita tidak mempunyai akses ke maklumat zon waktu, dan ketepatannya dipotong pada tahap hari . Mewakili hari ini, kita boleh menggunakan pembina yang mengambil panjang perwakilan milisaat:

Date currentSqlDate = new Date(System.currentTimeMillis());

Seperti sebelumnya, untuk tarikh tertentu, kita dapat menggunakan kelas SimpleDateFormat untuk menukar ke java.util.Date terlebih dahulu dan kemudian dapatkan milisaat menggunakan kaedah getTime . Kemudian, kita boleh menyampaikan nilai ini kepada pembina tarikh java.sql.Date .

Kita hanya boleh menggunakan kaedah valueOf apabila perwakilan Tali Tarikh sepadan dengan corak yyyy- [m] m- [d] d :

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

4.2. java.sql.Time

The java.sql.Time objek tawaran mengakses kepada jam, minit, dan maklumat kedua - sekali lagi, tanpa akses kepada zon waktu. Mari dapatkan Masa semasa menggunakan perwakilan milisaat:

Time currentSqlTime = new Time(System.currentTimeMillis());

Untuk menentukan masa menggunakan kaedah valueOf , kita dapat memasukkan nilai yang sepadan dengan corak hh: mm: ss :

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

4.3. java.sql.Timestamp

Pada bahagian terakhir ini, kami akan menggabungkan kedua-dua maklumat Tarikh dan Waktu SQL menggunakan kelas Cap Waktu . Ini membolehkan kita mempunyai ketepatan hingga nanodetik .

Mari buat objek Cap Waktu dengan sekali lagi memberikan nilai panjang untuk bilangan milisaat semasa kepada pembina:

Timestamp currentSqlTimestamp = new Timestamp(System.currentTimeMillis());

Akhirnya, mari kita buat Cap Waktu tersuai baru menggunakan kaedah valueOf dengan corak yyyy- [m] m- [d] d hh: mm: ss [.f…] yang diperlukan :

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

5. Kesimpulan

Dalam tutorial ringkas ini, kami telah melihat bagaimana untuk mendapatkan tarikh dan tarikh terkini untuk seketika tanpa menggunakan Java 8 atau perpustakaan luaran.

Seperti biasa, kod untuk artikel tersebut terdapat di GitHub.