Joda

2014-10-07 5 views
2

내가 자바 네이티브 메소드와 카운트 기간이 목에 통증이 내 모든 시도가 unprecise 결과 나는이 샘플을 보았다 Joda

주고 있기 때문에 Joda 라이브러리를 사용하려고 해요와 JDK의 GregorianCalendar 객체의 날짜를 사용하는 방법 내 모든 클래스의 GregorianCalendar를 관리하기 때문에

int n = Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays(); 

, 나는 일이 GregorianCalendar를, 그래서

public int countDays(GregorianCalendar start, GregorianCalendar end){ 
    //convert to joda start and end 
    ... 
    return Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays(); 
} 

내 QUES 같은 것을 지원 계산하는 방법이 필요합니다 GregorianCalendar 개체를 부작용없이 Joda가 관리하는 개체로 변환하고 재 변환하는 방법은 무엇입니까?

답변

4

DateTime 생성자는 Object이며 "include ReadableInstant, String, Calendar and Date."일 수 있습니다. 구체적으로는 GregorianCalendar입니다.

public int countDays(GregorianCalendar gregStart, GregorianCalendar gregEnd) { 
    DateTime start = new DateTime(gregStart); 
    DateTime end = new DateTime(gregEnd); 
    return Days.daysBetween(start, end).getDays(); 
} 
+0

당신을 감사합니다! 매우 도움이된다 – AndreaF

1

당신은이 라인을 따라 joda에게 LocalDate

뭔가를 만들기 전에 GragorianCalander에서 시간대를 얻을 필요가 :

public int countDays(GregorianCalendar start, GregorianCalendar end){ 

    TimeZone timeZone = start.getTimeZone(); 
    DateTimeZone jodaTimeZone = DateTimeZone.forID(timeZone.getID()); 
    DateTime dateTime = new DateTime(start.getTimeInMillis(), jodaTimeZone); 
    LocalDate startDate = dateTime.toLocalDate(); 

    timeZone = end.getTimeZone(); 
    jodaTimeZone = DateTimeZone.forID(timeZone.getID()); 
    dateTime = new DateTime(end.getTimeInMillis(), jodaTimeZone); 
    LocalDate endDate = dateTime.toLocalDate(); 

    return Days.daysBetween(startDate, endDate).getDays(); 
} 
+1

당신은 실제로'GregorianCalendar'에서'new DateTime (calendar);으로 직접 JODA'DateTime'을 만들 수 있습니다. –

+0

@DavidConrad 잘 가면 JodaTime을 자주 사용하지 않는다고 말할 수 있습니다. –