JavaRush /Blog Jawa /Random-JV /Pustaka sing intuisi lan kuat kanggo nggarap wektu lan ta...
theGrass
tingkat
Саратов

Pustaka sing intuisi lan kuat kanggo nggarap wektu lan tanggal pungkasane kasedhiya ing Jawa (Bagian 2).

Diterbitake ing grup
Wektu dina
    Dadi ayo nerusake. Entitas sabanjure sawise tanggal yaiku wektu, diwakili dening kelas LocalTime . Conto klasik sing nuduhake jam buka toko, umpamane saka 7:00 nganti 23:00. Toko mbukak ing wektu iki ing saindhenging negara, nanging wektu nyata bakal beda-beda gumantung ing zona wektu.     LocalTime minangka kelas nilai sing mung nyimpen wektu, tanpa tanggal utawa zona wektu sing gegandhengan. Nalika nambah utawa nyuda periode wektu, bakal dipotong ing tengah wengi. Yaiku, jam 20:00 ditambah 6 jam yaiku jam 2:00. Nggunakake LocalTime padha karo LocalDate : LocalTime time = LocalTime.of(20, 30); int hour = date.getHour(); // 20 int minute = date.getMinute(); // 30 time = time.withSecond(6); // 20:30:06 time = time.plusMinutes(3); // 20:33:06     Modifiers bisa digunakake karo LocalTime , nanging operasi wektu biasane ora rumit sing modifikasi dibutuhake.
Nggabungke tanggal lan wektu
    Kelas sabanjure sing bakal kita deleng yaiku LocalDateTime . Kelas nilai iki minangka kombinasi saka LocalDate lan LocalTime . Iku nuduhake tanggal lan wektu, tanpa zona wektu.      LocalDateTime bisa digawe langsung utawa kanthi nggabungake tanggal lan wektu: LocalDateTime dt1 = LocalDateTime.of(2014, Month.JUNE, 10, 20, 30); LocalDateTime dt2 = LocalDateTime.of(date, time); LocalDateTime dt3 = date.atTime(20, 30); LocalDateTime dt4 = date.atTime(time);     Opsi katelu lan kaping papat nggunakake metode atTime () , sing nyedhiyakake cara sing fleksibel kanggo nggabungake tanggal lan wektu. Umume kelas sistem tanggal lan wektu duwe metode "ing" sing bisa digunakake nalika nggabungake obyek sampeyan karo liyane kanggo nggawe sing luwih kompleks. Cara liya saka kelas LocalDateTime padha karo LocalDate lan LocalTime . Pola jeneng metode sing padha nggawe API luwih gampang sinau . Tabel iki nampilake kabeh prefiks metode: Pustaka sing intuisi lan kuat kanggo nggarap wektu lan tanggal pungkasane kasedhiya ing Jawa (Bagian 2).  - 1
enggal
    Nalika kita menehi hasil karo tanggal lan wektu, kita biasane nggarap taun, sasi, dina, jam, menit, detik. Nanging, iki mung siji model wektu sing bisa disebut "manungsa". Model kapindho sing umum digunakake yaiku wektu "mesin" utawa "terus-terusan". Ing model iki, titik ing sumbu wektu diwakili dening siji nomer akeh. Pendekatan iki nyederhanakake algoritma pitungan, lan digunakake kanggo nyimpen wektu ing sistem operasi Unix , ing ngendi wektu diwakili dening jumlah detik sing wis liwati wiwit 1 Januari 1970. Semono uga ing Jawa , wektu disimpen minangka jumlah milidetik sing wis liwati wiwit tanggal 1 Januari 1970. Pendekatan mesin kanggo pitungan wektu ing java.time API diwenehake dening kelas Nilai cepet . Iki menehi kemampuan kanggo makili titik ing sumbu wektu tanpa kabeh informasi sing ana, kayata zona wektu. Nyatane, kelas iki ngemot jumlah nanodetik sing wis liwati wiwit tengah wengi tanggal 1 Januari 1970. Instant start = Instant.now(); // произведем вычисления Instant end = Instant.now(); assert end.isAfter(start); //машина времени не сработала     Biasane kelas Instan digunakake kanggo nyimpen lan mbandhingake titik nalika sampeyan kudu nyimpen nalika sawetara acara kedadeyan nanging sampeyan ora peduli babagan zona wektu kedadeyan kasebut. Umume kasus, luwih menarik apa sing ora bisa ditindakake karo kelas Instan tinimbang apa sing bisa ditindakake. Contone, baris kode ing ngisor iki bakal mbuwang pangecualian: instant.get(ChronoField.MONTH_OF_YEAR); instant.plus(6, ChronoUnit.YEARS);     Pangecualian dumadi amarga obyek cepet mung nyimpen jumlah nanodetik lan ora nyedhiyakake kemampuan kanggo nggarap unit wektu sing luwih migunani kanggo manungsa. Kanggo nggunakake unit pangukuran liyane, sampeyan kudu paling ora nemtokake zona wektu.
Zona Wektu
    Prinsip zona wektu dikembangake ing Inggris nalika panemuan ril sepur lan perbaikan ing cara komunikasi liyane ngidini wong bisa lelungan kanthi jarak sing cukup kanggo bedane wektu srengenge. Nganti saiki, saben desa lan kutha urip miturut wektune dhewe-dhewe, sing paling kerep diukur nganggo jam matahari. Gambar iki nuduhake conto kangelan iki mimpin kanggo - tangan abang ing jam nuduhake wektu Greenwich, lan tangan ireng nuduhake wektu lokal, kang bedo 10 menit: Sistem zona wektu dikembangaké, ngganti wektu solar lokal Pustaka sing intuisi lan kuat kanggo nggarap wektu lan tanggal pungkasane kasedhiya ing Jawa (Bagian 2).  - 2     . Nanging kasunyatan utama yaiku zona wektu digawe dening politisi, lan asring digunakake kanggo nuduhake kontrol politik ing sawijining wilayah. Kaya kebijakan apa wae, aturan sing ana gandhengane karo zona wektu asring mbantah logika. Lan uga, aturan kasebut bisa diganti, lan asring diganti, tanpa bebaya. Aturan zona wektu dikumpulake dening grup internasional sing nerbitake Database Zona Wektu IANA . Isine pengenal saben wilayah ing Bumi, lan sejarah zona wektu diganti. Pengenal katon kaya "Eropa / London" utawa "Amerika / New_York" . Sadurunge java.time API dirilis, kelas TimeZone digunakake kanggo makili zona wektu . Saiki ZoneId digunakake tinimbang . Ana rong prabédan utama ing antarane. Kaping pisanan, ZoneId ora bisa diganti, sing ndadekake bisa nyimpen obyek kelas iki ing variabel statis, antara liya. Sareh, aturan dhewe disimpen ing ZoneRules kelas , lan ora ing ZoneId dhewe , lan kanggo njaluk wong sampeyan kudu nelpon getRules () cara ing ZoneId obyek kelas . Fitur umum kabeh zona wektu yaiku offset tetep saka UTC/Greenwich . Paling asring sampeyan nggunakake iki nalika ngomong bab beda wektu antarane kutha beda, kayata "New York 5 jam konco London." Kelas ZoneOffset , turunan saka ZoneId , nggambarake prabédan wektu karo meridian utama sing ngliwati Greenwich ing London. Saka sudut pandang pangembang, luwih becik ora kudu ngatasi zona wektu lan kerumitan. API java.time ngidini sampeyan nindakake iki anggere bisa. Yen bisa, gunakake kelas LocalDate, LocalTime, LocalDateTime lan Instant . Yen sampeyan ora bisa nindakake tanpa zona wektu, gunakake kelas ZonedDateTime . ZonedDateTime kelas ngidini sampeyan ngonversi tanggal lan wektu saka unit pangukuran manungsa, sing kita deleng ing tanggalan lan jam tangan, dadi unit mesin. Akibaté, sampeyan bisa nggawe ZonedTimeDate saka kelas Lokal utawa saka kelas Instan : ZoneId zone = ZoneId.of("Europe/Paris"); LocalDate date = LocalDate.of(2014, Month.JUNE, 10); ZonedDateTime zdt1 = date.atStartOfDay(zone); Instant instant = Instant.now(); ZonedDateTime zdt2 = instant.atZone(zone);     Salah sawijining fitur zona wektu sing paling ora nyenengake yaiku wektu sing diarani awan awan. Kanthi ngoper Daylight Saving Time menyang lan saka Greenwich, prabédan zona wektu sampeyan karo Greenwich ganti kaping pindho (utawa luwih) setaun, biasane mundhak ing musim semi lan suda ing musim gugur. Yen kedadeyan kasebut, kita kudu ngganti kabeh jam ing omah. Ing kelas java.time , data offset dituduhake minangka "transformasi offset" . Ing musim semi iki nyebabake "gap" ing wektu, nalika sawetara nilai wektu ora mungkin, lan ing musim gugur, sebaliknya, sawetara nilai wektu kedadeyan kaping pindho. Kabeh iki didhukung dening kelas ZonedDateTime liwat metode pabrik lan metode konverter. Contone, nambah sedina nambah dina sing logis, sing bisa diwakili luwih utawa kurang saka 24 jam yen kita ngalih menyang wayah awan utawa bali. Kajaba iku, metode atStartOfDay () dijenengi amarga kita ora bisa njamin yen dina bakal diwiwiti persis ing tengah wengi - kita kudu nggatekake kesenjangan wektu nalika ngalih menyang hemat awan. Lan tip pungkasan babagan wektu awan. Yen sampeyan pengin nduduhake yen sampeyan wis nyathet wektu tumpang tindih sajrone transisi saka musim panas menyang mangsa (nalika nilai wektu sing padha katon kaping pindho), sampeyan bisa nggunakake salah siji saka rong cara khusus sing dirancang kanggo kahanan kaya mengkono: Cara iki bakal bali sadurunge utawa mengko. zdt = zdt.withEarlierOffsetAtOverlap(); zdt = zdt.withLaterOffsetAtOverlap();     Nilai , yen obyek bakal kejiret ing tumpang tindih nalika transisi saka mangsa panas kanggo mangsa. Ing kabeh kahanan liyane, nilai bali bakal padha.
Interval wektu
    Kabeh kelas sing kita rembugan sadurunge kerja minangka titik ing timeline. Loro kelas nilai tambahan dibutuhake kanggo makili interval wektu. Kelas Duration nuduhake dawa wektu, diukur ing detik lan nanodetik. Contone, "23.6 detik." Kelas Periode nuduhake periode wektu sing diukur ing taun, sasi, lan dina. Contone - "3 taun, 2 sasi lan 6 dina." Interval iki bisa ditambahake utawa dikurangi saka tanggal utawa wektu: Period sixMonths = Period.ofMonths(6); LocalDate date = LocalDate.now(); LocalDate future = date.plus(sixMonths);
Format lan parsing
    Paket kabeh dirancang kanggo ngowahi format lan nampilake tanggal lan wektu - java.time.format . Paket kasebut ana ing sekitar kelas DateTimeFormatter lan pabrik DateTimeFormatterBuilder . Cara sing paling umum kanggo nggawe formatter yaiku liwat metode statis lan konstanta ing DateTimeFormatter , kalebu:
  • Konstanta kanggo format umum sing diterangake ing ISO, kayata ISO_LOCAL_DATE.
  • Pola sing diidentifikasi nganggo aksara, kayata ofPola("dd/MM/uuuu").
  • Gaya lokal kayata ofLocalizedDate(FormatStyle.MEDIUM).
    Sawise sampeyan wis digawe formatter a, sampeyan biasane nggunakake dening maringaken menyang cara kelas tanggal cocok: DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/uuuu"); LocalDate date = LocalDate.parse("24/06/2014", f); String str = date.format(f);     Kanthi cara iki, kode tanggung jawab kanggo format output tanggal diisolasi menyang kelas kapisah. Yen sampeyan kudu nemtokake lokal kanggo format tanggal kanthi kapisah, gunakake metode format karoLocale(Lokal) . Kelas sing tanggung jawab kanggo tanggalan, zona wektu, lan input / output nomer pecahan duwe cara sing padha. Yen sampeyan mbutuhake pilihan fine-tuning liyane, ndeleng dokumentasi kanggo kelas DateTimeFormatterBuilder , sing ngijini sampeyan kanggo nggawe formatter Komplek langkah dening langkah. Sampeyan uga ngidini sampeyan nyetel parsing teks sing ora sensitif huruf cilik, nglirwakake sawetara kesalahan parsing, nyetel offset lan unsur opsional.
Garis ing ngisor
     java.time API minangka model komprehensif anyar kanggo nggarap tanggal lan wektu ing Java SE 8 . Butuh gagasan lan implementasine saka Joda-Wektu kanggo tingkat sabanjuré lan pungkasanipun ngidini pangembang supaya nggunakake java.util.Date lan Tanggalan . Saiki nggarap tanggal lan wektu bisa nyenengake!      Artikel asli
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION