1. Ngenalke Tanggal Wektu API

Ngenalke API Wektu Tanggal

Pangripta Jawa ora seneng karo kahanan kelas Tanggal lan Tanggalan. Padha apik ing dina, nanging wektu ganti. Lan soko prasaja, kuat lan dipercaya dadi perlu. Lan kanthi rilis Java 8 (15 taun sawise Calendarmuncul), Java Date Time API dikenalake. Iki minangka kumpulan kelas sing kudu bisa ngrampungake saben tugas sing bisa ditindakake kanthi wektu.

Ana akeh kelas sing dipérang dadi sawetara paket:

Paket kasebut java.timeminangka paket dhasar kanggo Java Date Time API: ngemot kelas kayata LocalDate, LocalTime, LocalDateTime, Instant, Period, lan Duration. Kabeh obyek saka kelas kasebut yaiku immutable, sing tegese ora bisa diganti sawise digawe.

Paket java.time.formatngemot kelas kanggo format wektu, IE Ngonversi kaping (lan tanggal) kanggo strings lan kosok balene. Contone, ngemot DateTimeFormatterkelas serbaguna, sing ngganti SimpleDateFormatkelas kasebut.

Paket kasebut java.time.zonengemot kelas kanggo nggarap zona wektu. Isine kelas kayata TimeZonelan ZonedDateTime. Yen sampeyan nulis kode server kanggo klien sing ana ing macem-macem negara, sampeyan butuh kelas kasebut.


2. LocalDatekelas

Kelas pisanan lan paling migunani saka API Tanggal Wektu sing bakal kita deleng yaiku LocalDatekelas kasebut. Sing mbokmenawa bisa guess saka jenenge, kelas iki dirancang kanggo bisa karo tanggal.

Obyek kelas iki ora owah sawise digawe, yaiku LocalDatekelas ora bisa diganti. Nanging sifat iki nambah gamblang lan linuwih kanggo kelas. Utamane yen sawetara utas (utas eksekusi) sesambungan karo obyek kasebut ing wektu sing padha.

Kanggo nggawe LocalDateobyek anyar, sampeyan kudu nggunakake salah siji saka cara statis. Punika dhaptar sing utama.

Njupuk tanggal saiki

Kanggo entuk tanggal saiki, sampeyan kudu nggunakake now()metode statis. Iki luwih gampang tinimbang sing katon:

LocalDate today = LocalDate.now();

Where todaypunika LocalDatevariabel, lan LocalDate.now()telpon kanggo now()cara statis saka LocalDatekelas.

Tuladha:

Kode Output konsol
LocalDate today = LocalDate.now();
System.out.println("Today = " + today);

Today = 2019-02-22

Njupuk tanggal ing zona wektu tartamtu

Kelas kasebut LocalDateuga duwe variasi metode now(ZoneId)sing ngidini sampeyan entuk tanggal saiki ing zona wektu tartamtu.

Kanggo nindakake iki, kita kudu kelas liyane - ZoneIdkelas (java.time.ZoneId). Nduwe of()cara sing ngasilake ZoneIdobyek sing diwenehi jeneng zona wektu.

Kanggo nemtokake tanggal saiki ing Shanghai, sampeyan kudu nulis kode ing ngisor iki:

Kode Output konsol
ZoneId  timezone = ZoneId.of("Asia/Shanghai");
LocalDate today = LocalDate.now(timezone);
System.out.println("In Shanghai, now = " + today);


In Shanghai, now = 2019-02-22

Sampeyan bisa nemokake dhaptar jeneng kabeh zona wektu ing Internet.


3. Njupuk tanggal tartamtu

Kanggo entuk LocalDateobyek sing nuduhake tanggal tartamtu, sampeyan kudu nggunakake of()metode statis. Kabeh ing kene uga prasaja lan jelas:

LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);

Where datepunika LocalDatevariabel, lan telpon kanggo cara statis saka kelas.LocalDate.of()of()LocalDate

Ing kene kita ndeleng FEBRUARYkonstanta kelas Month(java.time.Month) digunakake kanggo nemtokake Februari minangka sasi.

Sampeyan uga bisa nemtokake sasi kanthi cara lawas - nggunakake nomer:

LocalDate date = LocalDate.of(2019, 2, 22);

Kalih? Tinimbang Februari? Apa tegese sasi maneh dinomer saka siji?

Ya, meh 20 taun sawise nggawe Jawa, sasi pungkasane mandheg angka saka nol.

Tuladha:

Kode Output konsol
LocalDate today = LocalDate.of(2019, 2, 22);
System.out.println("Today = " + today);

Today = 2019-02-22

Entuk tanggal kanthi indeks dina

Ana cara liyane sing menarik kanggo nggawe tanggal: nggunakake ofYearDaymetode kasebut, sampeyan bisa entuk tanggal mung adhedhasar nomer taun lan indeks dina ing taun kasebut. Punika tampilan umum:

LocalDate date = LocalDate.ofYearDay(year, day);

Endi yearnomer taun lan dayindeks dina ing taun.

Tuladha:

Kode Output konsol
LocalDate today = LocalDate.ofYearDay(2019, 100);
System.out.println("Today = " + today);

Today = 2019-04-10

Tanggal 100 ing 2019 yaiku 10 April.

Entuk tanggal Unix

Apa sampeyan kelingan manawa Dateobyek tansah nyimpen wektu minangka jumlah milidetik wiwit 1 Januari 1970? Kanggo mesthekake programer ora bakal kantun dina lawas sing apik, LocalDatekelas entuk ofEpochDay()metode, sing ngasilake tanggal sing diwilang saka 1 Januari 1970. Punika tampilan umum:

LocalDate date = LocalDate.ofEpochDay(day);

Endi daycacahe dina sing wis lumaku wiwit tanggal 1 Januari 1970.

Tuladha:

Kode Output konsol
LocalDate today = LocalDate.ofEpochDay(1);
System.out.println("Today = " + today);

Today = 1970-01-02

4. Njupuk unsur tanggal

Ora bisa ngganti LocalDateobyek, nanging sampeyan bisa entuk unsur individu saka tanggal sing disimpen. LocalDateobyek duwe sawetara cara kanggo iki:

Metode Katrangan
int getYear()
Ngasilake taun tanggal tartamtu
Month getMonth()
Ngasilake sasi tanggal: salah siji saka sawetara konstanta
JANUARY, FEBRUARY, ...;
int getMonthValue()
Ngasilake indeks sasi tanggal. Januari == 1.
int getDayOfMonth()
Ngasilake indeks dina sasi
int getDayOfYear()
Ngasilake indeks dina saka awal taun
DayOfWeek getDayOfWeek()
Ngasilake dina minggu: salah siji saka sawetara konstanta
MONDAY, TUESDAY, ...;
IsoEra getEra()
Ngasilake jaman: salah siji BCE(Sadurunge Era Saiki) lan CE(Era Saiki)

Tuladha:

Kode Output konsol
LocalDate today = LocalDate.now();
System.out.println(today.getYear());
System.out.println(today.getMonth());
System.out.println(today.getMonthValue());
System.out.println(today.getDayOfMonth());
System.out.println(today.getDayOfWeek());

2019
FEBRUARY
2
22
FRIDAY

5. Ngganti tanggal ing LocalDateobyek

Kelas kasebut LocalDatengemot sawetara cara sing ngidini sampeyan nggarap tanggal. Implementasi metode kasebut padha karo metode kelas String: ora ngganti LocalDateobyek sing ana, nanging ngasilake sing anyar kanthi data sing dikarepake.

Mangkene metode kelas LocalDate:

Metode Katrangan
plusDays(int days)
Nambah sawetara dina tartamtu kanggo tanggal
plusWeeks(int weeks)
Nambah minggu kanggo tanggal
plusMonths(int months)
Nambah sasi kanggo tanggal
plusYears(int years)
Nambah taun kanggo tanggal
minusDays(int days)
Subtracts dina saka tanggal
minusWeeks(int weeks)
Ngurangi minggu saka tanggal
minusMonths(int months)
Subtracts sasi saka tanggal
minusYears(int years)
Subtracts taun saka tanggal

Tuladha:

Kode Output konsol
LocalDate birthday = LocalDate.of(2019, 2, 28);
LocalDate nextBirthday = birthday.plusYears(1);
LocalDate firstBirthday = birthday.minusYears(30);

System.out.println(birthday);
System.out.println(nextBirthday);
System.out.println(firstBirthday);




2019-02-28
2020-02-28
1989-02-28

Cara birthday objectsing diarani ora owah. Nanging, cara kasebut ngasilake obyek anyar sing ngemot data sing dikarepake.