1. Ngalih saka Datekelas menyang Calendarkelas

Programer seneng Datekelas kasebut amarga kesederhanaan lan dhukungan kanggo standar Unix, nanging kaya sing dingerteni, saben mawar duwe eri.

Programer pengin Datekelas "pinter". Lan dheweke entuk apa sing dikarepake ing bentuk kelas Calendar. Iki disusun minangka cara kanggo ora mung nyimpen tanggal, nanging uga kanggo nindakake operasi sing angel karo tanggal.

Jeneng lengkap saka Calendarkelas punika java.util.Calendar. Aja lali ditambahake menyang statement ngimpor yen sampeyan arep nggunakake ing kode.

Sampeyan bisa nggawe Calendarobyek kanthi printah iki:

Calendar date = Calendar.getInstance();

Cara statis getInstance()saka Calendarkelas nggawe Calendarobyek sing diinisialisasi karo tanggal saiki. Tanggalan sing dikarepake bakal digawe adhedhasar setelan komputer sing mbukak program kasebut.

Utawa luwih tepat, tanggalan sing sampeyan entuk ... Iku amarga manungsa ing Bumi ora diwatesi ing siji tanggalan. Nanging, padha nggunakake akeh. Lan meh saben wong digandhengake karo sawetara agama utawa negara. Kelas kasebut Calendarndhukung 3:

Tanggalan Katrangan
Kalender Gregorian Kalender Gregorian Kristen
Kalender Budha kalender Budha
Kalender Kaisar Jepang Kalender kekaisaran Jepang

Nanging ana uga kalender Cina lan Arab. Sejatine, nggarap wektu ora gampang kaya sing dikira.

Ing kalender Tionghoa, taun resmi yaiku 4716 nalika pawulangan iki ditulis. Lan miturut kalender Muslim, taun 1398. Sugeng rawuh ing jagad gedhe, kanca programerku.

2. Nggawe obyek tanggalan

Kita bakal nggunakake kalender Gregorian, amarga iku paling umum ing donya. Paling ora nganti China tuku Oracle lan nggawe kalender Cina dadi sing utama.

Sampeyan bisa nggawe obyek tanggalan kanthi tanggal apa wae nggunakake statement kaya iki:

Calendar date = new GregorianCalendar(year, month, day);

Ya, sampeyan kudu nulis GregorianCalendarsaben wektu. Tinimbang Calendar, sampeyan uga bisa nulis GregorianCalendar— sing uga bakal bisa. Nanging nulis mung Calendarluwih cendhak.

Taun kudu ditulis kanthi lengkap, contone, sampeyan ora bisa nulis 19 tinimbang 2019. Sasi isih ana nomer saka nol. Nanging kaya sadurunge, dina sasi ora diitung saka nol. Kutu buku!

Kanggo nyetel wektu lan tanggal, sampeyan kudu ngliwati wektu minangka argumen tambahan:

... = new GregorianCalendar(year, month, day, hours, minutes, seconds);

Sampeyan bisa malah liwat milliseconds yen perlu. Iku parameter sawise sawetara detik.

3. Nampilake obyek tanggalan ing layar

Yen sampeyan mung nyithak obyek tanggalan ing layar, sampeyan ora bakal seneng banget karo asil kasebut.

Kode
Calendar calendar = new GregorianCalendar(2019, 03, 12);
System.out.println(calendar);
Output konsol
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Helsinki",offset=7200000,dstSavings=3600000,useDaylight=true,transitions=118,lastRule=java.util.SimpleTimeZone[id=Europe/Helsinki,offset=7200000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=2019,MONTH=3,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=12,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]

Bab sing kudu dielingake ing kene yaiku tanggalan iku tanggalan, dudu tanggal : duwe kabeh jinis setelan sing kabeh bakal ditampilake ing layar.

Luwih becik nggunakake SimpleDateFormatobyek kanggo nampilake tanggalan, nanging nganti sinau, sampeyan bisa nggunakake hack urip iki.

Date date = calendar.getTime();

A Calendarobyek bisa gampang diowahi kanggo Dateobyek, lan sampeyan wis ngerti carane kanggo nampilake Dateobyek. Sampeyan bisa nggunakake kode kaya iki kanggo ngowahi Calendarobyek menyang Date:

Nggunakake getTime()metode:

Kode Output konsol
Calendar calendar = new GregorianCalendar(2019, 03, 12);
System.out.println(calendar.getTime());
 Fri Apr 12 00:00:00 EEST 2019

Iku prakara sing beda, ta?

4. Nggarap unsur tanggal

Kanggo entuk unsur tartamtu saka tanggal (eg taun, sasi, ...), kelas Calendarduwe get()metode. Iku cara siji, nanging nduweni paramèter:

int month = calendar.get(Calendar.MONTH);

Where calendarpunika Calendarvariabel, lan MONTHlapangan pancet kelas Calendar.

Sampeyan ngliwati salah sawijining Calendarlapangan konstan kelas minangka argumen kanggo getmetode kasebut, lan sampeyan entuk nilai sing dikarepake minangka asil.

Tuladha

Kode Katrangan
Calendar calendar = Calendar.getInstance();

int era = calendar.get(Calendar.ERA);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);

int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);


jaman (sadurunge utawa sawise jaman umum)
taun sasi
dina
sasi

dina minggu
jam
menit
detik

Kanggo ngganti unsur tanggal, gunakake setcara:

calendar.set(Calendar.MONTH, value);

Where calendarpunika Calendarvariabel, lan MONTHlapangan pancet kelas Calendar.

Nalika nggarap setmetode, sampeyan ngliwati salah sawijining Calendarkolom konstan kelas minangka argumen pisanan, lan nilai anyar minangka argumen kapindho.

Tuladha

Kode Katrangan
Calendar calendar = new GregorianCalendar();

calendar.set(Calendar.YEAR, 2019);
calendar.set(Calendar.MONTH, 6);
calendar.set(Calendar.DAY_OF_MONTH, 4);
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND, 0);

System.out.println(calendar.getTime());


taun = 2019
wulan = Juli (nomer saka 0)
dina kaping 4
jam
menit
detik

5. Konstanta Calendarkelas

Kolom konstan kelas Calendarora diwatesi kanggo menehi jeneng unsur tanggal. Koyone ana lapangan kanggo saben kesempatan.

Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);

Contone, ana kolom konstan kanggo ngrujuk marang sasi:

Lan uga dina minggu:

Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
   System.out.println("It's Friday");
}

Kita ora bakal dhaptar kabeh. Kita mung ora pengin sampeyan kaget yen sampeyan ndeleng konstanta kaya iki ing kode kasebut.

Nggunakake konstanta ndadekake kode luwih bisa diwaca, mula programer nggunakake. Lan sasi sing nomer saka nul uga kanggo nambah readability. Utawa ora.

6. Ngganti tanggal ing Calendarobyek

Kelas kasebut Calendarduwe metode sing ngidini sampeyan ngoperasikake tanggal kanthi cara sing luwih cerdas. Contone, sampeyan bisa nambah taun, sasi, utawa sawetara dina kanggo tanggal. Utawa njupuk adoh. Cara iki diarani add(). Nggawe karo katon kaya iki:

calendar.add(Calendar.MONTH, value);

Where calendarpunika Calendarvariabel, lan MONTHlapangan pancet kelas Calendar.

Nalika nggarap addmetode, sampeyan ngliwati salah sawijining Calendarkolom konstan kelas minangka argumen pisanan, lan minangka argumen kapindho - nilai anyar sing bakal ditambahake.

Iki minangka cara cerdas liyane. Ayo ndeleng carane pinter iku:

Kode
Calendar calendar = new GregorianCalendar(2019, Calendar.FEBRUARY, 27);
calendar.add(Calendar.DAY_OF_MONTH, 2);
System.out.println(calendar.getTime());
Output konsol
Fri Mar 01 00:00:00 EET 2019

Cara iki mangertos mung ana 28 dina ing Februari 2019, dadi tanggal asil 1 Maret.

Saiki ayo njupuk 2 sasi! Apa sing kudu kita entuk? 27 Desember 2018! Ayo dipriksa saiki.

Kanggo nindakake operasi sing nyebabake tanggal sadurunge, sampeyan kudu menehi nilai negatif menyang add()metode kasebut:

Kode
Calendar calendar = new GregorianCalendar(2019, Calendar.FEBRUARY, 27);
calendar.add(Calendar.MONTH, -2);
System.out.println(calendar.getTime());
Output konsol
Thu Dec 27 00:00:00 EET 2018

Kerjane!

Cara iki nyathet dawane sasi lan taun kabisat sing beda-beda. Kabeh ing kabeh, cara sing apik. Iku persis apa sing paling programer sing nggarap tanggal perlu.

7. Rolling unsur tanggal

Nanging kadhangkala ana kahanan nalika kita ora pengin prilaku pinter iki, contone, sampeyan pengin nindakake soko kanggo salah siji bagéan saka tanggal tanpa ngganti kabeh liyane.

Kelas kasebut Calendarduwe metode khusus roll()kanggo iki. Tandhane mung kaya add()cara, nanging cara iki mung ngganti siji unsur tanggal, supaya liyane ora diganti.

Tuladha:

Kode
Calendar calendar = new GregorianCalendar(2019, Calendar.FEBRUARY, 27);
calendar.roll(Calendar.MONTH, -2);
System.out.println(calendar.getTime());
Output konsol
Fri Dec 27 00:00:00 EET 2019

Kita ngganti sasi, nanging taun lan tanggal tetep ora owah.