답변:
3 개의 클래스는 서로 다른 개념을 나타 내기 때문에 필요합니다. 따라서 상대적인 성능보다는 작업에 적합한 클래스를 선택해야합니다. 로부터 문서 에 나를 추가 의견 이탤릭체 :
간격 Joda 타임 다른 순간에 1 밀리 즉석에서 시간 간격을 나타낸다. 두 인스턴트는 모두 날짜 및 시간 연속체로 완전히 지정된 인스턴트이며 시간대와 함께 완료됩니다. 특정 시간이 정의됩니다. 예를 들어 어제 오전 20 : 00 : 00GMT와 오늘 오전 09 : 00 : 00GMT 사이의 간격 일 수 있습니다.
기간 Joda 타임은 밀리 초 단위로 측정 시간의 지속 시간을 나타냅니다. 지속 시간은 종종 간격에서 얻습니다. 즉, 구간 끝에서 시작을 빼서 기간을 도출 할 수 있습니다.
기간 Joda 타임은 예를 들어 필드의 관점에서 정의 된 시간의 기간, 3 년 5개월 이일 7 시간을 나타냅니다. 이는 밀리 초 단위로 정확하지 않다는 점과 다릅니다. 마침표 (시간 및 시간대 포함)를 지정하여 마침표를 정확한 시간 (밀리 초)으로 만 해결할 수 있습니다. 예를 들어 1 년의 기간을 고려하십시오. 1 월 1 일에 추가하면 항상 다음 1 월 1 일에 도착하지만 기간은 중간 연도의 윤년인지 여부에 따라 달라집니다. 마찬가지로 1 개월을 1 월 1 일에 추가하면 다음 달 1 일에 도착하지만 기간 (밀리 초)은 해당 월에 따라 다릅니다.
질문 3의 경우 지속 시간을 나누는 특정 방법은 실제로 필요하지 않습니다. 왜냐하면 지속 시간에서 항상 밀리 초 수를 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