1. Datekelas dan waktu Unix

Sejak awal Java, bahasa ini memiliki kelas khusus untuk bekerja dengan waktu dan tanggal — Date. Seiring waktu, beberapa kelas lagi untuk bekerja dengan tanggal muncul, tetapi pemrogram terus menggunakan Datekelas tersebut bahkan hingga hari ini.

Ini karena sangat sederhana dan nyaman. Dan sebagai seorang programmer, Anda pasti akan menemukannya di proyek nyata mana pun. Apakah akan menggunakannya atau tidak adalah pilihan Anda, tetapi Anda harus mengetahuinya. Jadi berikan beberapa menit dari waktu berharga Anda.

Apa yang membuat Datekelas ini begitu bagus? Kesederhanaannya.

Kelas Datemenyimpan informasi tanggal dan waktu sebagai jumlah milidetik yang telah berlalu sejak 1 Januari 1970. Itu adalah milidetik yang banyak, jadi longtipenya digunakan untuk menyimpannya.

Menarik.

Mengapa sejak tahun 1970 khususnya? Inilah yang disebut waktu Unix : begitulah cara sistem operasi Unix, yang merupakan kakek dari semua sistem operasi modern, menjaga waktu.

Tetapi Anda dapat dengan mudah mengetahui berapa banyak waktu yang telah berlalu antara dua tanggal: kurangi satu tanggal dari yang lain, dan Anda mendapatkan perbedaan waktu antara tanggal ke milidetik terdekat.

Berikut adalah beberapa contoh berguna untuk bekerja dengan Datekelas.


2. Mendapatkan tanggal saat ini

Untuk mendapatkan waktu dan tanggal saat ini, cukup buat Dateobjek. Setiap objek baru menyimpan waktu saat dibuat. Ini terlihat sangat sederhana:

Date current = new Date();

Setelah menjalankan perintah ini, currentvariabel akan menyimpan referensi ke Dateobjek yang dibuat, yang secara internal akan menyimpan waktu pembuatannya — jumlah milidetik yang telah berlalu sejak 1 Januari 1970.

Menampilkan tanggal saat ini di layar

Untuk menampilkan tanggal saat ini, cukup: a) buat Dateobjek baru, b) cetak ke layar menggunakan System.out.println()metode ini.

Contoh:

Kode Keluaran konsol
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

Inilah yang dimaksud dengan keluaran konsol:

Teks Penafsiran
Kamis _ Kamis
Februari 21 21 Februari
14:01:34 jam : menit : detik
Eet Zona waktu: Waktu Eropa Timur
2019 Tahun

3. Menetapkan tanggal tertentu

Kami menemukan cara mendapatkan waktu saat ini, tetapi bagaimana kami membuat Dateobjek yang menyimpan tanggal atau waktu yang berbeda?

Sekali lagi, semuanya sederhana di sini. Untuk menetapkan tanggal tertentu, Anda perlu menulis kode seperti ini:

Date birthday = new Date(year, month, day);

Semuanya sederhana dan jelas, tetapi ada dua nuansa yang harus diperhatikan:

  1. Tahun harus dihitung dari tahun 1900.
  2. Bulan diberi nomor dari nol.
Menarik.

Ini adalah warisan lain dari sistem operasi Unix: di Unix, pemrogram menandai tahun menggunakan dua digit. Alih-alih tahun 1977, mereka hanya menulis 77. Jadi 77 adalah tahun yang tepat jika dihitung dari tahun 1900.

Misalnya saya lahir pada tanggal 21 Maret 1989. Maret adalah bulan ketiga, jadi saya perlu menulis:

Kode Keluaran konsol
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

Bulan dihitung dari nol, tetapi hari tidak. Agak aneh, bukan?

Kami pikir pemrogram sejati seharusnya menang dan menomori hari dalam sebulan dari nol juga. Oh, konformis ini 🙂

Menetapkan waktu tertentu

Menetapkan waktu tertentu juga cukup sederhana: untuk ini, Anda perlu menulis pernyataan seperti ini:

Date birthday = new Date(year, month, day, hour, minutes, seconds);

Jam, menit, dan detik diberi nomor dari nol: biarkan programmer di dalam diri Anda menarik napas lega.

Contoh:

Kode Keluaran konsol
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

Kami mengatur waktu 12:15 dan tanggal 4 Juni 2005 . Ini agak sulit untuk dibaca oleh non-programmer, tetapi berfungsi sebagaimana mestinya.


4. Bekerja dengan elemen kencan

Anda dapat melakukan lebih banyak hal dengan Dateobjek daripada hanya menampilkannya. Ini memiliki metode yang memungkinkan Anda mendapatkan elemen individual dari tanggal yang disimpan secara internal:

metode Keterangan
int getYear()
Mengembalikan tahun tanggal relatif ke 1900.
int getMonth()
Mengembalikan bulan dari tanggal (bulan diberi nomor dari nol)
int getDate()
Mengembalikan hari dalam sebulan
int getDay()
Mengembalikan hari dalam seminggu
int getHours()
Mengembalikan jam
int getMinutes()
Mengembalikan menit
int getSeconds()
Mengembalikan detik

Contoh:

Kode Keluaran konsol Catatan
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current.getYear());
System.out.println(current.getMonth());
System.out.println(current.getDate());
System.out.println(current.getDay());

105
5
4
6

2005
Juni
hari di bulan
Sabtu

Omong-omong, sebuah Dateobjek tidak hanya memungkinkan Anda mendapatkan elemen individual dari sebuah tanggal, tetapi juga mengubahnya:

metode Keterangan
void setYear(int year) Mengubah tahun dari tanggal. Tahun ditunjukkan relatif terhadap 1900.
void setMonth(int month) Mengubah bulan pada tanggal (bulan diberi nomor dari nol)
void setDate(int date) Mengubah hari dalam sebulan
void setHours(int hours) Mengubah jam
void setMinutes(int minutes) Mengubah menit
void setSeconds(int seconds) Mengubah detik

5. Milidetik

Seperti yang kami katakan sebelumnya, Dateobjek menyimpan jumlah milidetik yang telah berlalu sejak 1 Januari 1970.

Jika kita membutuhkan nomor itu, kita bisa mendapatkannya dari objek Date:

long time = date.getTime();

Metode getTime()mengembalikan jumlah milidetik yang disimpan di dalam Dateobjek.

Anda tidak hanya dapat memperoleh jumlah milidetik, tetapi Anda juga dapat mengubah angka tersebut di objek yang sudah ada:

Date date = new Date();
date.setTime(1117876500000L);

Omong-omong, Anda dapat menulis ini lebih ringkas dengan melewatkan waktu ke Dateobjek tepat saat dibuat:

Date date = new Date(1117876500000L);

6. Membandingkan tanggal

Jika Anda ingin membandingkan dua tanggal dan mencari tahu mana yang lebih dulu, Anda memiliki tiga opsi

Cara pertama adalah dengan membandingkan jumlah milidetik yang disimpan masing-masing:

if (date1.getTime() < date2.getTime())

Cara kedua adalah dengan menggunakan before()metode objek Date:

if (date1.before(date2))

Bunyinya seperti ini: jika date1datang sebelum date2, maka ...

Cara ketiga adalah dengan menggunakan after()metode objek Date:

if (date2.after(date1))

Bunyinya seperti ini: jika date2setelah date1, maka ...


7. DateFormatkelas

Ingat, saat kami menampilkan tanggal di layar, kami melihat sesuatu seperti ini: Thu Feb 21 14:01:34 EET 2019. Segalanya tampak benar, tetapi formatnya lebih merupakan bagaimana sebuah tanggal akan ditampilkan untuk pemrogram daripada manusia normal. Kami ingin menampilkan tanggal dengan lebih jelas bagi pengguna. Sesuatu seperti Tuesday, February 21.

Dan tanpa tahun. Atau dengan satu tahun, jika perlu. Secara umum, kami ingin dapat menampilkan tanggal dengan cara yang berbeda.

Ada kelas khusus untuk ini: SimpleDateFormat.

Contoh:

Kode
Date current = new Date(105, 5, 4, 12, 15, 0);
SimpleDateFormat formatter = new SimpleDateFormat("MMM-dd-YYYY");
String message = formatter.format(current);
System.out.println(message);
Keluaran konsol
Jun-04-2005

Lihat apa yang ditampilkan program: Jun-04-2005. Itu sama sekali tidak seperti dulu.

Perbedaannya adalah kami tidak menampilkan Dateobjek itu sendiri, tetapi string khusus yang diperoleh dengan memanggil format()metode pada SimpleDateFormatobjek. Tapi itu bahkan bukan poin utama di sini.

Saat SimpleDateFormatobjek dibuat, kami mengirimkan string "MMM-dd-YYYY"sebagai parameter. String inilah yang menyampaikan format tanggal yang akhirnya kita lihat di keluaran konsol.

  • MMM menunjukkan untuk menampilkan nama bulan, disingkat menggunakan tiga huruf
  • dd menunjukkan untuk menampilkan hari dalam sebulan
  • YYYY menunjukkan untuk menampilkan tahun menggunakan empat digit

Jika kita ingin menampilkan bulan sebagai angka, alih-alih MMM, kita perlu menulis MM, yang menghasilkan pola "MM-dd-YYYY". Output layar akan06-04-2005

Kami akan membahas kelas ini secara lebih rinci nanti.


8. Date.parsemetode

Kelas Datebisa melakukan hal lain yang menarik dan berguna — kelas bisa mendapatkan tanggal dari sebuah string. Atau, seperti yang dikatakan pemrogram, itu dapat mengurai string.

Ini memiliki metode khusus parse()untuk ini. Parsing terlihat seperti ini:

Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );

Omong-omong, kode ini dapat ditulis dengan lebih ringkas:

Date date = new Date("Jul 06 12:15:00 2019");

Kami akan mempertimbangkan penguraian string secara lebih rinci di pelajaran lain.