Dalam Joda-Time 2, apa perbedaan antara tiga jenis rentang waktu:
- Titik
- Selang
Durasi
Mengapa kita membutuhkan tiga kelas?
Mana yang berkinerja lebih baik?
Mengapa membagi Periode atau Durasi atau instance Interval tidak diterapkan? Misalnyap = p.divideBy(2);
Period
. Proposal untuk menstandarisasi terminologi semacam itu telah diajukan tetapi belum tercapai.Jawaban:
3 kelas diperlukan karena mereka mewakili konsep yang berbeda sehingga masalah memilih yang tepat untuk pekerjaan daripada kinerja relatif. Dari dokumentasi dengan komentar yang saya tambahkan dalam huruf miring :
Sebuah selang di Joda-Time merupakan interval waktu dari satu milidetik instan ke instan lain. Kedua instance adalah instance yang ditentukan sepenuhnya dalam kontinum datetime, lengkap dengan zona waktu. Waktu spesifik ditentukan misalnya ini mungkin interval antara 20: 00: 00GMT kemarin dan 09: 00: 00GMT pagi ini.
Sebuah durasi di Joda-Time merupakan durasi waktu diukur dalam milidetik. Durasi sering diperoleh dari suatu interval. yaitu kita dapat mengurangi mulai dari akhir interval untuk mendapatkan durasi
Suatu periode dalam Joda-Time merupakan periode waktu yang didefinisikan dalam bidang, misalnya, 3 tahun 5 bulan 2 hari dan 7 jam. Ini berbeda dari durasi dalam hal itu tidak tepat dalam hal milidetik. Suatu periode hanya dapat diselesaikan dengan jumlah milidetik yang tepat dengan menetapkan instan (termasuk kronologi dan zona waktu) yang terkait dengan. mis. pertimbangkan periode 1 tahun, jika kita menambahkan ini ke 1 Januari kita akan selalu tiba pada 1 Januari berikutnya tetapi durasinya akan tergantung pada apakah tahun intervensi adalah tahun kabisat atau tidak. Demikian pula jika kita menambahkan 1 bulan ke tanggal 1 bulan maka kita akan tiba pada tanggal 1 bulan berikutnya tetapi durasinya (dalam milidetik) akan bervariasi berdasarkan bulan yang bersangkutan
Untuk pertanyaan 3, metode khusus untuk membagi durasi tidak benar-benar diperlukan karena kita selalu bisa mendapatkan jumlah milidetik dari durasi sebagai
long
(menggunakangetMillis()
), membaginya dan membangun durasi baru (menggunakannew Duration(long duration)
).Membagi periode tidak benar-benar memiliki makna yang nyata berdasarkan definisi periode di atas. misal berapa setengah bulan? (panjangnya akan tergantung pada bulan mana).
sumber
Untuk menambah jawaban mikej :
Sebuah Joda-Time durasi adalah interval waktu "fisik"; misalnya:
12000 milliseconds
<- ini adalah durasiInterval Joda-Time sebenarnya adalah sepasang instance (mulai instan - akhir instan). Sebuah instan , sekali lagi, konsep "fisik", titik di timeline. Misalnya (hanya notasi yang mungkin):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
<- ini adalah intervalSebuah selang , kemudian, dapat dikonversi ke durasi , tetapi tidak sebaliknya.
Pertimbangkan dua interval ini:
I1=(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
I2=(2010/3/3 21:00:00.000 UTC ; 2010/3/3 22:00:00.000 UTC)
Sebagai interval,
I1
danI2
berbeda, karena titik akhir berbeda; tetapi jika aku mengkonversikannya ke durasi, saya mendapatkan hal yang sama:3600000 milliseconds
.(Analogi Math: interval
[10,12]
dan[95,97]
berbeda interval , tetapi mereka memiliki sama panjang : "panjang interval" peta untuk durasi ).Akhirnya, suatu periode adalah selang dari "waktu sipil", dinyatakan sebagai sejumlah bulan, hari, jam, dll. Itu tidak -dengan sendirinya- mewakili interval "fisik", oleh karena itu tidak dapat secara langsung dikonversi menjadi durasi (bulan memiliki panjang variabel ...).
Ini menjawab pertanyaan 3: Anda hanya dapat membagi dua waktu fisik (satu durasi).
sumber