Yanıtlar:
Farklı sınıfları temsil ettikleri için 3 sınıfa ihtiyaç vardır, bu yüzden göreceli performanstan ziyade işe uygun olanı seçmek meselesidir. Gönderen belgelerinde bana tarafından eklenen yorumlarla italik :
Bir aralık Joda-Time bir anlık bir milisaniye andan itibaren zaman aralığını temsil etmektedir. Her iki örnek de, saat dilimi ile birlikte, datetime sürekliliğinde tam olarak belirtilen örneklerdir. Belirli zamanlar tanımlanır, örneğin bu dün 20: 00: 00GMT ile bu sabah 09: 00: 00GMT arasındaki aralık olabilir.
Bir süre Joda-Time milisaniye cinsinden ölçülen bir zaman süresi temsil eder. Süre genellikle bir aralıktan elde edilir. yani bir süre türetmek için bir aralığın sonundan başlangıcı çıkarabiliriz
Bir dönem Joda-Time örneğin alanları bakımından tanımlanmış bir süre, 3 yıl 5 ay 2 gün ve 7 saat temsil eder. Bu, milisaniye cinsinden kesin olmadığı için bir süreden farklıdır. Bir süre, ilgili olduğu anı (kronoloji ve saat dilimi dahil) belirterek tam milisaniyeye kadar çözülebilir. Örneğin, 1 yıllık dönemi düşünün, bunu 1 Ocak'a eklersek, her zaman 1 Ocak'a ulaşacağız, ancak süre, geçen yılın artık yıl olup olmadığına bağlı olacaktır. Benzer şekilde bir ayın 1'ine 1 ay eklersek, bir sonraki ayın 1'ine ulaşırız ancak süre (milisaniye cinsinden) söz konusu aya göre değişir
Soru 3 için Süreyi bölmek için belirli bir yönteme gerçekten gerek yoktur, çünkü süreden milisaniye sayısını her zaman long
(kullanarak getMillis()
) alabilir, bölebilir ve yeni bir süre (kullanarak new Duration(long duration)
) oluşturabiliriz.
Bir dönemin bölünmesi, yukarıdaki dönemin tanımına dayalı olarak gerçek bir anlama sahip değildir. örneğin yarım ay nedir? (uzunluğu hangi aya bağlı olacaktır).
Mikej'ın cevabına eklemek için :
Bir Joda-Time süresi "fiziksel" zaman aralığıdır; Örneğin:
12000 milliseconds
<- bu bir süredir
Bir Joda-Time aralığı aslında bir çift örnektir (başlangıç anında - bitiş anında). Bir an , yine, "fiziksel" bir kavram, zaman çizelgesindeki bir noktadır. Örneğin (sadece olası bir gösterim):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
<- bu bir aralıktır
Bir aralık , daha sonra bir süreye dönüştürülebilir , ancak tersine çevrilemez .
Şu iki aralığı düşünün:
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)
Aralıklar olarak I1
ve I2
farklıdır, çünkü uç noktalar farklıdır; Ben sürelere çevirebiliriz ama eğer ben de aynı şeyi olsun: 3600000 milliseconds
.
(Matematik benzetmesi: aralıklar [10,12]
ve [95,97]
farklı aralıklardır , ancak aynı uzunluktadırlar : "aralık uzunluğu" süreye eşler ).
Son olarak, bir dönem , birkaç ay, gün, saat vb. Olarak ifade edilen bir "sivil zaman" süresidir. -Kendi başına- bir "fiziksel" aralığı temsil etmez, dolayısıyla doğrudan bir süresi (ayların değişken uzunlukları vardır ...).
Bu 3. soruya cevap verir: Fiziksel bir zaman (süre) yalnızca ikiye bölebilirsiniz.
Period
. Bu terminolojiyi standartlaştırma önerisi gündeme getirildi ancak henüz tamamlanmadı.