Menguasai Tanggal dan Waktu Java: Konstruktor, Metode & Praktik Terbaik
Java menyediakan kelas Date yang tersedia dalam paket java.util, kelas ini mengenkapsulasi tanggal dan waktu saat ini.
Kelas Date mendukung dua konstruktor seperti yang ditunjukkan dalam tabel berikut.
| Sr.No. | Constructor & Description |
| 1 | Date( ) Konstruktor ini menginisialisasi objek dengan tanggal dan waktu saat ini. |
| 2 | Date(long millisec) Konstruktor ini menerima argumen yang sama dengan jumlah milidetik yang telah berlalu sejak tengah malam, 1 Januari 1970. |
Berikut adalah metode dari kelas date.
| Sr.No. | Method & Description |
| 1 | boolean after(Date date) Mengembalikan true jika objek Date yang memanggil berisi tanggal yang lebih dari yang ditentukan oleh date, jika tidak, mengembalikan false. |
| 2 | boolean before(Date date) Mengembalikan true jika objek Date yang memanggil berisi tanggal yang lebih awal dari yang ditentukan oleh date, jika tidak, mengembalikan false. |
| 3 | Object clone( ) Menduplikasi objek Date yang memanggil. |
| 4 | int compareTo(Date date) Membandingkan nilai objek yang memanggil dengan date. Mengembalikan 0 jika nilai sama. Mengembalikan nilai negatif jika objek yang memanggil lebih awal dari date. Mengembalikan nilai positif jika objek yang memanggil lebih dari date. |
| 5 | int compareTo(Object obj) Bekerja sama dengan compareTo(Date) jika obj adalah class Date. Jika tidak, ia melempar ClassCastException. |
| 6 | boolean equals(Object date) Mengembalikan true jika objek Date yang memanggil berisi waktu dan tanggal yang sama dengan yang ditentukan oleh date, jika tidak, mengembalikan false. |
| 7 | long getTime( ) Mengembalikan jumlah milidetik yang telah berlalu sejak 1 Januari 1970. |
| 8 | int hashCode( ) Mengembalikan kode hash untuk objek yang memanggil. |
| 9 | void setTime(long time) Mengatur waktu dan tanggal seperti yang ditentukan oleh time, yang mewakili waktu yang berlalu dalam milidetik dari tengah malam, 1 Januari 1970. |
| 10 | String toString( ) Mengonversi objek Date yang memanggil menjadi string dan mengembalikan hasilnya. |
Mendapatkan Tanggal dan Waktu Saat Ini
Ini adalah metode yang sangat mudah untuk mendapatkan tanggal dan waktu saat ini dalam Java. Anda dapat menggunakan objek Date sederhana dengan metode toString() untuk mencetak tanggal dan waktu saat ini sebagai berikut −
Contoh
Live Demo
import java.util.Date; public class DateDemo { public static void main(String args[]) { // Instantiate a Date object Date date = new Date(); // display time and date using toString() System.out.println(date.toString()); } } Ini akan menghasilkan hasil berikut −
Output
on May 04 09:51:52 CDT 2009
Perbandingan Tanggal
Berikut adalah tiga cara untuk membandingkan dua tanggal −
Anda dapat menggunakan getTime( ) untuk mendapatkan jumlah milidetik yang telah berlalu sejak tengah malam, 1 Januari 1970, untuk kedua objek dan kemudian membandingkan nilai-nilai ini.
Anda dapat menggunakan metode before( ), after( ), dan equals( ). Karena tanggal 12 bulan lebih awal dari tanggal 18, misalnya, new Date(99, 2, 12).before(new Date (99, 2, 18)) mengembalikan true.
Anda dapat menggunakan metode compareTo( ), yang didefinisikan oleh antarmuka Comparable dan diimplementasikan oleh Date.
Pemformatan Tanggal Menggunakan SimpleDateFormat
SimpleDateFormat adalah kelas konkret untuk memformat dan mem-parsing tanggal dengan cara yang sensitif terhadap locale. SimpleDateFormat memungkinkan Anda untuk memulai dengan memilih pola apa pun yang ditentukan pengguna untuk pemformatan tanggal-waktu.
Contoh
Live Demo
import java.util.*; import java.text.*; public class DateDemo { public static void main(String args[]) { Date dNow = new Date( ); SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); System.out.println("Current Date: " + ft.format(dNow)); } } Ini akan menghasilkan hasil berikut −
Output
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
Kode Format SimpleDateFormat
Untuk menentukan format waktu, gunakan string pola waktu. Dalam pola ini, semua huruf ASCII dicadangkan sebagai huruf pola, yang didefinisikan sebagai berikut −
| Character | Description | Example |
| G | Era designator | AD |
| y | Year in four digits | 2001 |
| M | Month in year | July or 07 |
| d | Day in month | 10 |
| h | Hour in A.M./P.M. (1~12) | 12 |
| H | Hour in day (0~23) | 22 |
| m | Minute in hour | 30 |
| s | Second in minute | 55 |
| S | Millisecond | 234 |
| E | Day in week | Tuesday |
| D | Day in year | 360 |
| F | Day of week in month | 2 (second Wed. in July) |
| w | Week in year | 40 |
| W | Week in month | 1 |
| a | A.M./P.M. marker | PM |
| k | Hour in day (1~24) | 24 |
| K | Hour in A.M./P.M. (0~11) | 10 |
| z | Time zone | Eastern Standard Time |
| ' | Escape for text | Delimiter |
| " | Single quote | ` |
Pemformatan Tanggal Menggunakan printf
Pemformatan tanggal dan waktu dapat dilakukan dengan sangat mudah menggunakan metode printf. Anda menggunakan format dua huruf, dimulai dengan t dan diakhiri dengan salah satu huruf dalam tabel seperti yang ditunjukkan dalam kode berikut.
Contoh
Live Demo
import java.util.Date; public class DateDemo { public static void main(String args[]) { // Instantiate a Date object Date date = new Date(); // display time and date String str = String.format("Current Date/Time : %tc", date ); System.out.printf(str); } } Ini akan menghasilkan hasil berikut −
Output
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
Sampol akan agak konyol jika Anda harus menyediakan tanggal beberapa kali untuk memformat setiap bagian. Untuk alasan itu, string format dapat menunjukkan indeks argumen yang akan diformat.
Indeks harus segera mengikuti % dan harus diakhiri dengan $.
Contoh
Live Demo
import java.util.Date; public class DateDemo { public static void main(String args[]) { // Instantiate a Date object Date date = new Date(); // display time and date System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date); } } Ini akan menghasilkan hasil berikut −
Output
Due date: February 09, 2004
Alternatifnya, Anda dapat menggunakan flag <. Ini menunjukkan bahwa argumen yang sama seperti dalam spesifikasi format sebelumnya harus digunakan lagi.
Contoh
Live Demo
import java.util.Date; public class DateDemo { public static void main(String args[]) { // Instantiate a Date object Date date = new Date(); // display formatted date System.out.printf("%s %tB %<te, %<tY", "Due date:", date); } } Ini akan menghasilkan hasil berikut −
Output
Due date: February 09, 2004
Karakter Konversi Tanggal dan Waktu
| Character | Description | Example |
| c | Complete date and time | Mon May 04 09:51:52 CDT 2009 |
| F | ISO 8601 date | 2004-02-09 |
| D | U.S. formatted date (month/day/year) | 02/09/2004 |
| T | 24-hour time | 18:05:19 |
| r | 12-hour time | 06:05:19 pm |
| R | 24-hour time, no seconds | 18:05 |
| Y | Four-digit year (with leading zeroes) | 2004 |
| y | Last two digits of the year (with leading zeroes) | 04 |
| C | First two digits of the year (with leading zeroes) | 20 |
| B | Full month name | February |
| b | Abbreviated month name | Feb |
| m | Two-digit month (with leading zeroes) | 02 |
| d | Two-digit day (with leading zeroes) | 03 |
| e | Two-digit day (without leading zeroes) | 9 |
| A | Full weekday name | Monday |
| a | Abbreviated weekday name | Mon |
| j | Three-digit day of year (with leading zeroes) | 069 |
| H | Two-digit hour (with leading zeroes), between 00 and 23 | 18 |
| k | Two-digit hour (without leading zeroes), between 0 and 23 | 18 |
| I | Two-digit hour (with leading zeroes), between 01 and 12 | 06 |
| l | Two-digit hour (without leading zeroes), between 1 and 12 | 6 |
| M | Two-digit minutes (with leading zeroes) | 05 |
| S | Two-digit seconds (with leading zeroes) | 19 |
| L | Three-digit milliseconds (with leading zeroes) | 047 |
| N | Nine-digit nanoseconds (with leading zeroes) | 047000000 |
| P | Uppercase morning or afternoon marker | PM |
| p | Lowercase morning or afternoon marker | pm |
| z | RFC 822 numeric offset from GMT | -0800 |
| Z | Time zone | PST |
| s | Seconds since 1970-01-01 00:00:00 GMT | 1078884319 |
| Q | Milliseconds since 1970-01-01 00:00:00 GMT | 1078884319047 |
Ada kelas lain yang berguna terkait dengan Tanggal dan waktu. Untuk detail lebih lanjut, Anda dapat merujuk ke dokumentasi standar Java.
Mengurai String menjadi Tanggal
Kelas SimpleDateFormat memiliki beberapa metode tambahan, yang đáng diperhatikan parse( ), yang mencoba mem-parsing string sesuai dengan format yang disimpan dalam objek SimpleDateFormat yang diberikan.
Contoh
Live Demo
import java.util.*; import java.text.*; public class DateDemo { public static void main(String args[]) { SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); String input = args.length == 0 ? "1818-11-11" : args[0]; System.out.print(input + " Parses as "); Date t; try { t = ft.parse(input); System.out.println(t); } catch (ParseException e) { System.out.println("Unparseable using " + ft); } } } Sebuah contoh eksekusi program di atas akan menghasilkan hasil berikut −
Output
1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818
Tidur untuk Beberapa saat
Anda dapat tidur untuk periode waktu apa pun dari satu milidetik hingga umur komputer Anda. Misalnya, program berikut akan tidur selama 3 detik −
Contoh
Live Demo
import java.util.*; public class SleepDemo { public static void main(String args[]) { try { System.out.println(new Date( ) + "\n"); Thread.sleep(5*60*10); System.out.println(new Date( ) + "\n"); } catch (Exception e) { System.out.println("Got an exception!"); } } } Ini akan menghasilkan hasil berikut −
Output
Sun May 03 18:04:41 GMT 2009 Sun May 03 18:04:51 GMT 2009
Mengukur Waktu yang Berlalu
Kadang-kadang, Anda mungkin perlu mengukur titik waktu dalam milidetik. Jadi mari kita tulis ulang contoh di atas sekali lagi −
Contoh
Live Demo
import java.util.*; public class DiffDemo { public static void main(String args[]) { try { long start = System.currentTimeMillis( ); System.out.println(new Date( ) + "\n"); Thread.sleep(5*60*10); System.out.println(new Date( ) + "\n"); long end = System.currentTimeMillis( ); long diff = end - start; System.out.println("Difference is : " + diff); } catch (Exception e) { System.out.println("Got an exception!"); } } } Ini akan menghasilkan hasil berikut −
Output
Sun May 03 18:16:51 GMT 2009 Sun May 03 18:16:57 GMT 2009 Difference is : 5993
Kelas GregorianCalendar
GregorianCalendar adalah implementasi konkret dari kelas Calendar yang menerapkan kalender Gregorian normal yang Anda kenal. Kami tidak membahas kelas Calendar dalam tutorial ini, Anda dapat mencari dokumentasi standar Java untuk ini.
Metode getInstance( ) dari Calendar mengembalikan GregorianCalendar yang diinisialisasi dengan tanggal dan waktu saat ini di locale default dan zona waktu. GregorianCalendar mendefinisikan dua bidang: AD dan BC. Ini mewakili dua era yang didefinisikan oleh kalender Gregorian.
Ada juga beberapa konstruktor untuk objek GregorianCalendar −
| Sr.No. | Constructor & Description |
| 1 | GregorianCalendar() Membangun GregorianCalendar default menggunakan waktu saat ini di zona waktu default dengan locale default. |
| 2 | GregorianCalendar(int year, int month, int date) Membangun GregorianCalendar dengan tanggal yang ditentukan diatur di zona waktu default dengan locale default. |
| 3 | GregorianCalendar(int year, int month, int date, int hour, int minute) Membangun GregorianCalendar dengan tanggal dan waktu yang ditentukan diatur untuk zona waktu default dengan locale default. |
| 4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) Membangun GregorianCalendar dengan tanggal dan waktu yang ditentukan diatur untuk zona waktu default dengan locale default. |
| 5 | GregorianCalendar(Locale aLocale) Membangun GregorianCalendar berdasarkan waktu saat ini di zona waktu default dengan locale yang diberikan. |
| 6 | GregorianCalendar(TimeZone zone) Membangun GregorianCalendar berdasarkan waktu saat ini di zona waktu yang diberikan dengan locale default. |
| 7 | GregorianCalendar(TimeZone zone, Locale aLocale) Membangun GregorianCalendar berdasarkan waktu saat ini di zona waktu yang diberikan dengan locale yang diberikan. |
Berikut adalah daftar beberapa metode pendukung yang disediakan oleh kelas GregorianCalendar −
| Sr.No. | Method & Description |
| 1 | void add(int field, int amount) Menambahkan jumlah waktu (bertanda) yang ditentukan ke bidang waktu yang diberikan, berdasarkan aturan kalender. |
| 2 | protected void computeFields() Mengonversi UTC dalam milidetik menjadi nilai bidang waktu. |
| 3 | protected void computeTime() Mengganti Calendar Mengonversi nilai bidang waktu menjadi UTC dalam milidetik. |
| 4 | boolean equals(Object obj) Membandingkan GregorianCalendar ini dengan referensi objek. |
| 5 | int get(int field) Mendapatkan nilai untuk bidang waktu tertentu. |
| 6 | int getActualMaximum(int field) Mengembalikan nilai maksimum yang dapat dimiliki bidang ini, dengan tanggal saat ini. |
| 7 | int getActualMinimum(int field) Mengembalikan nilai minimum yang dapat dimiliki bidang ini, dengan tanggal saat ini. |
| 8 | int getGreatestMinimum(int field) Mengembalikan nilai minimum tertinggi untuk bidang yang diberikan jika bervariasi. |
| 9 | Date getGregorianChange() Mendapatkan tanggal perubahan Kalender Gregorian. |
| 10 | int getLeastMaximum(int field) Mengembalikan nilai maksimum terendah untuk bidang yang diberikan jika bervariasi. |
| 11 | int getMaximum(int field) Mengembalikan nilai maksimum untuk bidang yang diberikan. |
| 12 | Date getTime() Mendapatkan waktu saat ini kalender ini. |
| 13 | long getTimeInMillis() Mendapatkan waktu saat ini kalender ini sebagai long. |
| 14 | TimeZone getTimeZone() Mendapatkan zona waktu. |
| 15 | int getMinimum(int field) Mengembalikan nilai minimum untuk bidang yang diberikan. |
| 16 | int hashCode() Mengganti hashCode. |
| 17 | boolean isLeapYear(int year) Menentukan apakah tahun yang diberikan adalah tahun kabisat. |
| 18 | void roll(int field, boolean up) Menambahkan atau mengurangi (naik/turun) satu unit waktu pada bidang waktu yang diberikan tanpa mengubah bidang yang lebih besar. |
| 19 | void set(int field, int value) Mengatur bidang waktu dengan nilai yang diberikan. |
| 20 | void set(int year, int month, int date) Mengatur nilai untuk bidang tahun, bulan, dan tanggal. |
| 21 | void set(int year, int month, int date, int hour, int minute) Mengatur nilai untuk bidang tahun, bulan, tanggal, jam, dan menit. |
| 22 | void set(int year, int month, int date, int hour, int minute, int second) Mengatur nilai untuk bidang tahun, bulan, tanggal, jam, menit, dan detik. |
| 23 | void setGregorianChange(Date date) Mengatur tanggal perubahan GregorianCalendar. |
| 24 | void setTime(Date date) Mengatur waktu saat ini kalender ini dengan Date yang diberikan. |
| 25 | void setTimeInMillis(long millis) Mengatur waktu saat ini kalender ini dari nilai long yang diberikan. |
| 26 | void setTimeZone(TimeZone value) Mengatur zona waktu dengan nilai zona waktu yang diberikan. |
| 27 | String toString() Mengembalikan representasi string dari kalender ini. |
Contoh
Live Demo
import java.util.*; public class GregorianCalendarDemo { public static void main(String args[]) { String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; int year; // Create a Gregorian calendar initialized // with the current date and time in the // default locale and timezone. GregorianCalendar gcalendar = new GregorianCalendar(); // Display current time and date information. System.out.print("Date: "); System.out.print(months[gcalendar.get(Calendar.MONTH)]); System.out.print(" " + gcalendar.get(Calendar.DATE) + " "); System.out.println(year = gcalendar.get(Calendar.YEAR)); System.out.print("Time: "); System.out.print(gcalendar.get(Calendar.HOUR) + ":"); System.out.print(gcalendar.get(Calendar.MINUTE) + ":"); System.out.println(gcalendar.get(Calendar.SECOND)); // Test if the current year is a leap year if(gcalendar.isLeapYear(year)) { System.out.println("The current year is a leap year"); }else { System.out.println("The current year is not a leap year"); } } } Ini akan menghasilkan hasil berikut −
Output
Date: Apr 22 2009 Time: 11:25:27 The current year is not a leap year
Untuk daftar lengkap konstanta yang tersedia dalam kelas Calendar, Anda dapat merujuk ke dokumentasi standar Java.