Untuk melacak waktu, Java menghitung jumlah milidetik dari awal 1 Januari 1970. Artinya, misalnya, 2 Januari 1970 itu dimulai 86.400.000 milidetik kemudian. Demikian pula, 31 Desember 1969, dimulai 86.400.000 milidetik sebelum 1 Januari 1970. Kelas Java Date
melacak milidetik tersebut sebagai sebuah long
nilai. Karena long
merupakan angka bertanda tangan, tanggal dapat dinyatakan sebelum dan sesudah dimulainya tanggal 1 Januari 1970. Nilai positif dan negatif terbesar yang diungkapkan oleh long
primitif dapat menghasilkan tanggal maju dan mundur sekitar 290.000.000 tahun, yang sesuai dengan jadwal kebanyakan orang.
Kelas Tanggal
The Date
kelas, ditemukan di java.util
paket, merangkum long
nilai yang mewakili saat tertentu. Salah satu konstruktor yang berguna adalah Date()
, yang membuat Date
objek yang mewakili waktu objek dibuat. The getTime()
Metode mengembalikan long
nilai dari Date
objek. Dalam program di bawah ini, saya menggunakan Date()
konstruktor untuk membuat tanggal berdasarkan kapan program dijalankan, dan getTime()
metode untuk mengetahui jumlah milidetik yang diwakili oleh tanggal tersebut:
import java.util. *; kelas publik Sekarang {public static void main (String [] args) {Date now = new Date (); lama nowLong = now.getTime (); System.out.println ("Nilainya" + nowLong); }}
Ketika saya menjalankan program itu, itu memberi saya nilai 972.568.255.150. Pemeriksaan cepat dengan kalkulator saya memastikan bahwa angka ini setidaknya dalam perkiraan yang benar: sedikit kurang dari 31 tahun, yang sesuai dengan jumlah tahun yang tepat antara 1 Januari 1970, dan hari saya menulis artikel ini. Meskipun komputer dapat berkembang pesat dengan angka-angka seperti nilai sebelumnya, kebanyakan orang enggan mengatakan hal-hal seperti "Sampai jumpa di 996.321.998.346." Untungnya, Java menyediakan cara untuk mengonversi Date
objek Strings
, yang merepresentasikan tanggal dengan cara yang lebih tradisional. The DateFormat
kelas, yang dibahas dalam bagian berikutnya, dapat membuat Strings
dengan sigap.
Kelas DateFormat
Salah satu tujuan dari
DateFormat
kelas untuk membuat
Strings
dengan cara yang dapat dengan mudah ditangani oleh manusia. Namun, karena perbedaan bahasa, tidak semua orang ingin melihat kencan dengan cara yang persis sama. Seseorang di Prancis mungkin lebih suka melihat "25 desembre 2000", sementara seseorang di Amerika Serikat mungkin lebih terbiasa melihat "25 Desember 2000". Jadi ketika sebuah contoh dari a
DateFormat
kelas dibuat, objek berisi informasi mengenai format tertentu di mana tanggal akan ditampilkan. Untuk menggunakan format default komputer pengguna, Anda dapat menerapkan
getDateInstance
metode dengan cara berikut untuk membuat yang sesuai
DateFormat
obyek:
DateFormat df = DateFormat.getDateInstance ();
The DateFormat
kelas ditemukan dalam java.text
paket.
Mengonversi ke String
Anda dapat mengubah Date
objek menjadi string dengan format
metode ini. Ini ditunjukkan dalam program demonstrasi berikut:
import java.util. *; import java.text. *; kelas publik NowString {public static void main (String [] args) {Date now = new Date (); DateFormat df = DateFormat.getDateInstance (); String s = df.format (sekarang); System.out.println ("Hari ini adalah" + s); }}
The getDateInstance
Metode yang ditunjukkan dalam kode di atas, tanpa argumen, menciptakan sebuah objek dalam format standar atau gaya. Java juga menyediakan beberapa gaya alternatif untuk tanggal, yang bisa Anda peroleh melalui kelebihan beban getDateInstance(int style)
. Demi kenyamanan, DateFormat
berikan beberapa konstanta siap pakai yang bisa Anda gunakan sebagai argumen dalam getDateInstance
metode ini. Beberapa contoh SHORT
, MEDIUM
, LONG
, dan FULL
, yang ditunjukkan dalam program di bawah ini:
import java.util. *; import java.text. *; kelas publik StyleDemo {public static void main (String [] args) {Date now = new Date (); DateFormat df = DateFormat.getDateInstance (); DateFormat df1 = DateFormat.getDateInstance (DateFormat.SHORT); DateFormat df2 = DateFormat.getDateInstance (DateFormat.MEDIUM); DateFormat df3 = DateFormat.getDateInstance (DateFormat.LONG); DateFormat df4 = DateFormat.getDateInstance (DateFormat.FULL); String s = df.format (sekarang); String s1 = df1.format (sekarang); String s2 = df2.format (sekarang); String s3 = df3.format (sekarang); String s4 = df4.format (sekarang); System.out.println ("(Default) Today adalah" + s); System.out.println ("(SHORT) Hari ini adalah" + s1); System.out.println ("(MEDIUM) Hari ini adalah" + s2); System.out.println ("(LONG) Hari ini adalah" + s3); System.out.println ("(FULL) Hari ini adalah" + s4); }}
Program itu menghasilkan yang berikut:
(Default) Hari ini 8 Nov 2000 (SHORT) Hari ini 11/8/00 (SEDANG) Hari ini 8 Nov 2000 (PANJANG) Hari ini 8 November 2000 (FULL) Hari ini Rabu, 8 November 2000
Program yang sama, setelah dijalankan di komputer saya dengan pengaturan regional default diubah ke Swedia, menampilkan output ini:
(Default) Hari ini 2000-nov-08 (SHORT) Hari ini 2000-11-08 (SEDANG) Hari ini 2000-nov-08 (PANJANG) Hari ini adalah 8 november 2000 (FULL) Hari ini tanggal 8 november 2000
Dari situ, Anda dapat melihat bahwa dalam bahasa Swedia, bulan dalam setahun tidak dikapitalisasi (meskipun November masih november). Juga, perhatikan bahwa LONG
dan FULL
versinya identik dalam bahasa Swedia, namun berbeda dalam bahasa Inggris Amerika. Selain itu, menarik bahwa kata dalam bahasa Swedia untuk Wednesday, onsdag , tidak disertakan dalam FULL
versi tersebut, di mana FULL
versi bahasa Inggrisnya menyertakan nama hari.
Perhatikan bahwa Anda dapat menggunakan getDateInstance
metode ini untuk mengubah bahasa untuk fileDateFormat
contoh; namun, dalam kasus di atas, ini dilakukan pada mesin Windows 98 dengan mengubah pengaturan regional dari panel kontrol. Pelajarannya di sini adalah bahwa pengaturan regional default bervariasi dari satu tempat ke tempat lain, yang memiliki kelebihan dan kekurangan yang harus diperhatikan oleh programmer Java. Salah satu keuntungannya adalah programmer Java dapat menulis satu baris kode untuk menampilkan tanggal, namun tanggal tersebut muncul dalam puluhan atau bahkan ratusan bentuk yang berbeda ketika program dijalankan pada komputer di seluruh dunia. Tapi itu bisa menjadi kerugian jika pemrogram menginginkan hanya satu format - yang lebih disukai, misalnya, dalam program yang mengeluarkan teks dan tanggal yang dicampur bersama. Jika teks dalam bahasa Inggris, tidak akan konsisten untuk memiliki tanggal dalam format lain, seperti Jerman atau Spanyol. Jika pemrogram mengandalkan format regional default,format tanggal akan bervariasi sesuai dengan pengaturan regional komputer pelaksana.
Mengurai String
Anda juga dapat menggunakan DateFormat
kelas untuk membuat Date
objek dari a String
, melalui parse()
metode. Metode khusus ini dapat menimbulkan ParseException
kesalahan, jadi Anda harus menggunakan teknik penanganan kesalahan yang tepat. Contoh program yang mengubah a String
menjadi Date
ditunjukkan di bawah ini:
import java.util. *; import java.text. *; kelas publik ParseExample {public static void main (String [] args) {String ds = "November 1, 2000"; DateFormat df = DateFormat.getDateInstance (); coba {Date d = df.parse (ds); } catch (ParseException e) {System.out.println ("Unable to parse" + ds); }}}
The parse()
Metode adalah alat yang berguna untuk membuat tanggal sewenang-wenang. Saya akan memeriksa cara lain untuk membuat tanggal sewenang-wenang. Juga, Anda akan melihat bagaimana melakukan perhitungan dasar dengan tanggal, seperti menghitung tanggal 90 hari setelah tanggal lain. Anda dapat menyelesaikan kedua tugas dengan GregorianCalendar
kelas.
Kelas GregorianCalendar
Salah satu cara untuk membuat objek yang mewakili tanggal arbitrer adalah dengan menggunakan konstruktor GregorianCalendar
kelas berikut, yang ditemukan dalam java.util
paket:
GregorianCalendar (int tahun, int bulan, int tanggal)
Perhatikan bahwa untuk bulan, Januari adalah 0, Februari adalah 1, dan seterusnya, hingga Desember, yaitu 11. Karena itu bukan angka yang diasosiasikan kebanyakan dari kita dengan bulan dalam setahun, program mungkin akan lebih mudah dibaca jika mereka menggunakan konstanta dari induk Calendar
kelas: JANUARY
, FEBRUARY
, dan sebagainya. Jadi, untuk membuat objek yang mewakili tanggal pertama kali Wilbur dan Orville Wright menerbangkan pesawat bermesin mereka (17 Desember 1903), Anda dapat menggunakan:
GregorianCalendar firstFlight = new GregorianCalendar (1903, Calendar.DECEMBER, 17);
Demi kejelasan, Anda harus menggunakan formulir sebelumnya. Namun, Anda juga harus mempelajari cara membaca formulir yang lebih pendek di bawah ini. Contoh berikut mewakili tanggal 17 Desember 1903 yang sama (ingat, dalam bentuk yang lebih pendek 11 mewakili Desember):
GregorianCalendar firstFlight = new GregorianCalendar (1903, 11, 17);
Di bagian sebelumnya, Anda telah mempelajari cara mengubah Date
objek menjadi Strings
. Anda akan melakukan hal yang sama lagi; tapi pertama-tama, Anda perlu mengonversi GregorianCalendar
objek menjadi Date
. Untuk melakukannya, Anda akan menggunakan getTime()
metode yang GregorianCalendar
diturunkan dari Calendar
kelas induknya . The getTime()
kembali metode yang Date
berhubungan dengan GregorianCalendar
objek. Anda dapat meletakkan seluruh proses pembuatan GregorianCalendar
objek, mengubahnya menjadi Date
, dan mendapatkan dan mengeluarkan yang sesuai String
dalam program berikut:
import java.util. *; import java.text. *; Penerbangan kelas publik {public static void main (String [] args) {GregorianCalendar firstFlight = new GregorianCalendar (1903, Calendar.DECEMBER, 17); Tanggal d = firstFlight.getTime (); DateFormat df = DateFormat.getDateInstance (); String s = df.format (d); System.out.println ("Penerbangan pertama adalah" + s); }}
Terkadang berguna untuk membuat instance GregorianCalendar
kelas yang mewakili hari saat instance dibuat. Untuk melakukannya, cukup gunakan GregorianCalendar
konstruktor tanpa argumen, seperti:
GregorianCalendar thisday = new GregorianCalendar ();
Contoh program untuk mengeluarkan tanggal hari ini, dimulai dengan sebuah GregorianCalendar
objek adalah:
import java.util.*; import java.text.*; class Today { public static void main(String[] args) { GregorianCalendar thisday = new GregorianCalendar(); Date d = thisday.getTime(); DateFormat df = DateFormat.getDateInstance(); String s = df.format(d); System.out.println("Today is " + s); } }
Note the similarities between the Date()
constructor and the GregorianCalendar()
constructor: both create an object, which in simple terms, represents today.
Date manipulation
The GregorianCalendar
class offers methods for manipulating dates. One useful method is add()
. With the add()
method, you can add such time units as years, months, and days to a date. To use the add()
method, you must supply the field being increased, and the integer amount by which it will increase. Some useful constants for the fields are DATE
, MONTH
, YEAR
, and WEEK_OF_YEAR
. The add()
method is used in the program below to calculate a date 80 days in the future. Phileas Fogg, the central character in Jules Verne's Around the World in 80 Days, could have used such a program to calculate a date 80 days from his departure on October 2, 1872:
import java.util.*; import java.text.*; public class World { public static void main(String[] args) { GregorianCalendar worldTour = new GregorianCalendar(1872, Calendar.OCTOBER, 2); worldTour.add(GregorianCalendar.DATE, 80); Date d = worldTour.getTime(); DateFormat df = DateFormat.getDateInstance(); String s = df.format(d); System.out.println("80 day trip will end " + s); } }
While the example is a bit fanciful, adding days to a date is a common operation: video rentals can be due in 3 days, a library may lend books for 21 days, stores frequently require purchased items to be exchanged within 30 days. The following program shows a calculation using years:
import java.util.*; import java.text.*; public class Mortgage { public static void main(String[] args) { GregorianCalendar mortgage = new GregorianCalendar(1997, Calendar.MAY, 18); mortgage.add(Calendar.YEAR, 15); Date d = mortgage.getTime(); DateFormat df = DateFormat.getDateInstance(); String s = df.format(d); System.out.println("15 year mortgage amortized on " + s); } }
One important side effect of the add()
method is that it changes the original date. Sometimes it is important to have both the original date and the modified date. Unfortunately, you cannot simply create a new GregorianCalendar
object set equal to the original. The reason is that the two variables have a reference to one date. If the date is changed, both variables now refer to the changed date. Instead, a new object should be created. The following example will demonstrate this:
import java.util. *; import java.text. *; kelas publik ThreeDates {public static void main (String [] args) {GregorianCalendar gc1 = new GregorianCalendar (2000, Calendar.JANUARY, 1); GregorianCalendar gc2 = gc1; GregorianCalendar gc3 = new GregorianCalendar (2000, Calendar.JANUARY, 1); // Tiga tanggal semuanya sama dengan 1 Januari 2000 gc1.add (Calendar.YEAR, 1); // gc1 dan gc2 diubah DateFormat df = DateFormat.getDateInstance (); Tanggal d1 = gc1.getTime (); Tanggal d2 = gc2.getTime (); Tanggal d3 = gc3.getTime (); String s1 = df.format (d1); String s2 = df.format (d2); String s3 = df.format (d3); System.out.println ("gc1 adalah" + s1); System.out.println ("gc2 adalah" + s2); System.out.println ("gc3 adalah" + s3); }}