คำตอบ:
จำเป็นต้องใช้คลาส 3 คลาสเนื่องจากเป็นแนวคิดที่แตกต่างกันดังนั้นจึงเป็นเรื่องของการเลือกสิ่งที่เหมาะสมสำหรับงานแทนที่จะเป็นงานที่สัมพันธ์กัน จากเอกสารที่มีความคิดเห็นเพิ่มโดยฉันเป็นตัวเอียง :
ช่วงเวลาใน Joda เวลาหมายถึงช่วงเวลาจากที่หนึ่งมิลลิวินาทีฉับพลันได้อีก อินสแตนซ์ทั้งคู่เป็นอินสแตนซ์ที่ระบุอย่างครบถ้วนใน datetime continuum พร้อมด้วยเขตเวลา เวลาที่ระบุถูกกำหนดไว้เช่นนี้อาจเป็นช่วงเวลาระหว่าง 20: 00: 00GMT เมื่อวานนี้และเวลา 09: 00: 00GMT ในเช้านี้
ระยะเวลาใน Joda เวลาหมายถึงระยะเวลาของเวลาที่วัดเป็นมิลลิวินาที ระยะเวลามักจะได้รับจากช่วงเวลา นั่นคือเราสามารถลบเริ่มต้นจากจุดสิ้นสุดของช่วงเวลาเพื่อหาช่วงเวลา
ระยะเวลาใน Joda เวลาหมายถึงระยะเวลาของเวลาที่กำหนดไว้ในแง่ของสาขาเช่น 3 ปี 5 เดือน 2 วัน 7 ชั่วโมง สิ่งนี้แตกต่างจากช่วงเวลาที่ไม่แน่นอนในแง่ของมิลลิวินาที ช่วงเวลาสามารถแก้ไขเป็นจำนวนมิลลิวินาทีที่แน่นอนเท่านั้นโดยการระบุทันที (รวมถึงเหตุการณ์และโซนเวลา) ที่สัมพันธ์กับ เช่นพิจารณาระยะเวลา 1 ปีหากเราเพิ่มสิ่งนี้ลงในวันที่ 1 มกราคมเราจะมาถึงในวันที่ 1 มกราคมถัดไป แต่ระยะเวลาจะขึ้นอยู่กับว่าปีที่เข้าแทรกแซงนั้นเป็นปีอธิกสุรทินหรือไม่ ในทำนองเดียวกันหากเราเพิ่ม 1 เดือนไปยังวันที่ 1 ของเดือนเราจะมาถึงที่ 1 ของเดือนถัดไป แต่ระยะเวลา (เป็นมิลลิวินาที) จะแตกต่างกันไปตามเดือนที่มีปัญหา
สำหรับคำถามที่ 3 ไม่จำเป็นต้องใช้วิธีการเฉพาะในการแบ่งช่วงเวลาเพราะเราสามารถรับจำนวนมิลลิวินาทีจากระยะเวลาในแบบ a long
(โดยใช้getMillis()
) หารและสร้างช่วงเวลาใหม่ (โดยใช้new Duration(long duration)
)
การแบ่งช่วงเวลาไม่มีความหมายที่แท้จริงตามคำจำกัดความของช่วงเวลาด้านบน เช่นครึ่งเดือนคืออะไร (ความยาวของมันจะขึ้นอยู่กับเดือนใด)
วิธีเพิ่มคำตอบของ mikej :
Joda เวลา ระยะเวลาคือ "กาย" ช่วงเวลา; เช่น:
12000 milliseconds
<- นี่คือช่วงเวลา
ช่วงเวลาของ Joda-Time เป็นคู่ของอินสแตนท์ (เริ่มต้นทันที - สิ้นสุดทันที) ทันทีเป็นอีกครั้งที่ "กาย" แนวคิดจุดในระยะเวลาที่ เช่น (เป็นเพียงสัญลักษณ์ที่เป็นไปได้):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
<- นี่คือช่วงเวลา
ช่วงเวลานั้นสามารถแปลงเป็นระยะเวลาแต่ไม่ย้อนกลับ
พิจารณาช่วงเวลาทั้งสองนี้:
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)
ตามช่วงเวลาI1
และI2
แตกต่างกันเพราะจุดสิ้นสุดแตกต่างกัน แต่ถ้าฉันแปลงมันเป็นระยะเวลาฉันจะได้สิ่งนั้นเหมือนกัน: 3600000 milliseconds
.
(เปรียบเทียบคณิตศาสตร์: ช่วงเวลา[10,12]
และ[95,97]
มีความแตกต่างช่วงเวลาแต่พวกเขามีเหมือนกันความยาว : "ความยาวช่วง"แมปกับระยะเวลา )
ในที่สุดช่วงเวลาก็ล่วงเลยไปของ "เวลาพลเรือน" ซึ่งแสดงเป็นจำนวนเดือนวันชั่วโมง ฯลฯ มันไม่ได้ - โดยตัวเอง - แทนช่วงเวลา "ทางกายภาพ" ดังนั้นจึงไม่สามารถแปลงเป็นระยะเวลา (เดือนมีความยาวแปรผัน ... )
คำตอบนี้ตอบคำถามที่ 3: คุณสามารถหารด้วยเวลาทางกายภาพได้สองครั้งเท่านั้น (ระยะเวลา)
Period
เวลาพิจารณา มีการยกข้อเสนอเพื่อสร้างมาตรฐานคำศัพท์ดังกล่าว แต่ยังไม่สำเร็จ