Dapatkan Tanggal Sekarang Sebelum Jawa 8

1. Perkenalan

Dalam sistem lama, kita mungkin perlu bekerja dengan tanggal ketika API tanggal dan waktu baru maupun pustaka Joda-Time yang sangat direkomendasikan tidak tersedia.

Dalam tutorial singkat ini, kita akan melihat beberapa pendekatan untuk melihat bagaimana mendapatkan tanggal saat ini dalam sistem pra-Java 8 .

2. Waktu Sistem

Jika yang kita butuhkan hanyalah satu nilai numerik yang mewakili tanggal dan waktu saat ini, kita dapat menggunakan waktu sistem. Untuk mendapatkan jumlah milidetik yang berlalu sejak 1 Januari 1970 00:00:00 GMT kita bisa menggunakan metode currentTimeMillis yang mengembalikan long :

long elapsedMilliseconds = System.currentTimeMillis();

Saat kami ingin mengukur waktu yang telah berlalu dengan lebih presisi, kami dapat menggunakan metode nanoTime . Ini akan mengembalikan nilai nanodetik yang telah berlalu dari momen tetap tetapi berubah-ubah.

Waktu arbitrer ini sama untuk semua panggilan di dalam JVM, jadi nilai yang dikembalikan hanya berguna untuk menghitung perbedaan dalam nanodetik berlalu antara beberapa panggilan nanoTime :

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

3. Paket java.util

Dengan menggunakan kelas-kelas dari paket java.util , kita dapat merepresentasikan sebuah momen dalam waktu, biasanya dalam milidetik yang telah berlalu sejak 1 Januari 1970 00:00:00 GMT .

3.1. java.util.Date

Kami dapat mewakili tanggal dan waktu tertentu dengan menggunakan objek Tanggal . Ini berisi ketepatan milidetik dan informasi zona waktu .

Meskipun ada banyak konstruktor yang tersedia, cara termudah untuk membuat objek Tanggal yang mewakili tanggal saat ini di zona waktu lokal adalah dengan menggunakan konstruktor dasar:

Date currentUtilDate = new Date();

Sekarang mari buat objek Tanggal untuk tanggal dan waktu tertentu. Kita bisa menggunakan konstruktor yang disebutkan di atas dan hanya meneruskan nilai milidetik.

Alternatifnya, kita dapat menggunakan kelas SimpleDateFormat untuk mengonversi nilai String menjadi objek Tanggal aktual :

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

Kita dapat menggunakan berbagai pola tanggal untuk menyesuaikan dengan kebutuhan kita.

3.2. java.util.Calendar

Sebuah Kalender objek dapat melakukan apa Tanggal tidak, dan itu lebih baik untuk kencan perhitungan aritmatika karena juga dapat mengambil Lokal . Kami dapat menentukan Lokal sebagai wilayah geografis, politik, atau budaya.

Untuk mendapatkan tanggal saat ini, tanpa TimeZone atau Locale yang ditentukan, kita dapat menggunakan metode getInstance :

Calendar currentUtilCalendar = Calendar.getInstance();

Dan untuk konversi Kalender ke Tanggal , kita cukup menggunakan metode getTime :

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

Faktanya, kelas GregorianCalendar adalah implementasi kalender yang paling banyak digunakan di dunia.

4. Paket java.sql

Selanjutnya, kita akan menjelajahi tiga ekstensi dari kelas java.util.Date yang mewakili objek SQL yang setara.

4.1. java.sql.Date

Dengan objek java.sql.Date , kami tidak memiliki akses ke informasi zona waktu, dan presisi terpotong pada tingkat hari . Untuk merepresentasikan hari ini, kita dapat menggunakan konstruktor yang membutuhkan representasi lama dalam milidetik:

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

Seperti sebelumnya, untuk tanggal tertentu, kita bisa menggunakan kelas SimpleDateFormat untuk mengonversi ke java.util.Date terlebih dahulu dan kemudian mendapatkan milidetik menggunakan metode getTime . Kemudian, kita dapat meneruskan nilai ini ke konstruktor java.sql.Date .

Kita cukup menggunakan metode valueOf ketika representasi String dari sebuah Tanggal cocok dengan pola yyyy- [m] m- [d] d :

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

4.2. java.sql.Time

The java.sql.Time objek penawaran akses ke jam, menit, dan informasi kedua - sekali lagi, tanpa akses ke zona waktu. Mari kita dapatkan Waktu saat ini menggunakan representasi milidetik:

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

Untuk menentukan waktu menggunakan metode valueOf , kita dapat memasukkan nilai yang cocok dengan pola hh: mm: ss :

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

4.3. java.sql.Timestamp

Di bagian terakhir ini, kita akan menggabungkan informasi Tanggal dan Waktu SQL menggunakan kelas Timestamp . Hal ini memungkinkan kami memiliki presisi hingga nanodetik .

Mari buat objek Timestamp dengan sekali lagi meneruskan nilai panjang untuk jumlah milidetik saat ini ke konstruktor:

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

Akhirnya, mari kita membuat custom baru Timestamp menggunakan valueOf metode dengan yang dibutuhkan YYYY- [m] m- [d] d hh: mm: ss [.f ...] pola:

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

5. Kesimpulan

Dalam tutorial singkat ini, kita telah melihat bagaimana mendapatkan tanggal saat ini dan tanggal untuk seketika tertentu tanpa menggunakan Java 8 atau pustaka eksternal apa pun.

Seperti biasa, kode artikel tersedia di GitHub.