Jawa pungkasane duwe cara sing intuisi lan dipercaya kanggo nggarap tanggal lan wektu. Prinsip tanggal lan wektu minangka dhasar ing pirang-pirang aplikasi. Macem-macem kaya tanggal lair, tanggal sewa, wektu acara, lan jam buka toko kabeh adhedhasar tanggal lan wektu, nanging Java SE ora nyedhiyakake cara sing trep kanggo nggarap. Diwiwiti karo Java SE 8 , ana paket java.time - sing nyedhiyakake API sing terstruktur kanthi apik kanggo nggarap tanggal lan wektu.
Mangkene dhaptar cilik masalah sing ana ing implementasine:
Latar mburi
Nalika Java pisanan metu, ing versi 1.0 , mung kelas kanggo nggarap tanggal lan wektu yaiku java.util.Date . Wangsulan: Bab ingkang pisanan pangembang ngeweruhi iku ora makili "tanggal". Nyatane, iki nggambarake wektu, akurat nganti milidetik, diukur wiwit tanggal 1 Januari 1970. Nanging, adhedhasar kasunyatan sing Date 's toString () cara nampilake tanggal lan wektu ing zona wektu sing ditemtokake ing setelan java mesin , sawetara pangembang salah nyimpulake yen Tanggal bisa digunakake karo zona wektu. Ndandani kelas iki dadi angel banget (utawa kesed) yen ing versi 1.1 kita kudu nambah kelas anyar - java.util.Calendar . Sayange, kelas Tanggalan ternyata ora luwih apik tinimbang Date .- Bisa diganti. Kelas kayata tanggal lan wektu kudu ora bisa diganti.
- Offsets. Taun ing Tanggal diwiwiti saka 1900, sasi ing loro kelas diwiwiti saka nol.
- Jeneng. Tanggal dudu "tanggal", lan Tanggalan dudu tanggalan.
- Formatting. Formatting mung bisa digunakake karo Tanggal, dudu Tanggalan, lan ora aman thread.
Review
java.time API anyar ngemot 5 paket:- java.time - paket dhasar ngemot obyek kanggo nyimpen nilai
- java.time.chrono - menehi akses menyang tanggalan beda
- java.time.format - format tanggal lan wektu lan pangenalan
- java.time.temporal - perpustakaan tingkat rendah lan fungsi sing luwih maju
- java.time.zone - kelas kanggo nggarap zona wektu
Tanggal
Kelas LocalDate minangka salah sawijining sing paling penting ing API anyar . Isine nilai immutable sing makili tanggal. Sampeyan ora bisa nyetel wektu utawa zona wektu. Jeneng "lokal" bisa uga sampeyan kenal karo Joda-Time , lan asale saka standar ISO-8601 . Tegese persis ora ana zona wektu. Ateges, LocalDate minangka katrangan tanggal, kayata "5 April 2014". Wektu nyata tanggal iki bakal beda-beda gumantung saka zona wektu sampeyan. Contone, ing Australia tanggal iki bakal 10 jam luwih awal tinimbang ing London, lan 18 jam luwih awal tinimbang ing San Francisco. Kelas LocalDate duwe kabeh cara sing umum dibutuhake:LocalDate date = LocalDate.of(2014, Month.JUNE, 10); int year = date.getYear(); // 2014 Month month = date.getMonth(); // Июнь int dom = date.getDayOfMonth(); // 10 DayOfWeek dow = date.getDayOfWeek(); // Вторник int len = date.lengthOfMonth(); // 30 (дней в Июне) boolean leap = date.isLeapYear(); // false (не високосный год)
Ing conto kita, kita ndeleng tanggal digawe nggunakake metode pabrik (kabeh konstruktor pribadi). Sabanjure kita takon obyek kanggo sawetara data. Elinga yen enumerasi
Wulan lan
DayOfWeek dirancang kanggo nggawe kode luwih bisa diwaca lan dipercaya. Ing conto ing ngisor iki kita bakal weruh carane ngowahi tanggal. Wiwit kelas ora bisa diganti, asil bakal dadi obyek anyar, nanging sing asli bakal tetep kaya saiki.
LocalDate date = LocalDate.of(2014, Month.JUNE, 10); date = date.withYear(2015); // 2015-06-10 date = date.plusMonths(2); // 2015-08-10 date = date.minusDays(1); // 2015-08-09
Iki minangka owah-owahan sing relatif prasaja, nanging asring sampeyan kudu nggawe modifikasi tanggal sing luwih rumit. Ana mekanisme khusus kanggo iki ing
java.time API - TemporalAdjuster . Tujuane kanggo nyedhiyakake alat sing dibangun sing ngidini sampeyan ngapusi tanggal, umpamane entuk obyek sing cocog karo dina pungkasan sasi. Sawetara kalebu ing
API , nanging sampeyan bisa nambah dhewe. Nggunakake modifiers gampang banget, nanging mbutuhake impor statis:
import static java.time.DayOfWeek.* import static java.time.temporal.TemporalAdjusters.* LocalDate date = LocalDate.of(2014, Month.JUNE, 10); date = date.with(lastDayOfMonth()); date = date.with(nextOrSame(WEDNESDAY));
Nggunakake modifiers nyederhanakake kode sampeyan. Ora ana sing pengin ndeleng akeh manipulasi tanggal manual. Yen sawetara jinis manipulasi tanggal kedadeyan kaping pirang-pirang ing proyek sampeyan, tulisake modifikasi sampeyan dhewe lan tim sampeyan bisa nggunakake minangka komponen sing wis ditulis lan diuji.
GO TO FULL VERSION