2010-01-19 5 views
1

두 날짜 (밀리 초)를 사용하고이 두 날짜 간의 기간을 나타내는 문장을 반환하는 메소드를 만들었습니다.JodaTime을 사용하여 기간을 올바르게 정의합니다.

public static String formatDuration(long start, long end) { 
    Interval interval = new Interval(start, end); 
    return getPeriodFormatter().print(interval.toPeriod()).trim(); 
} 

private static PeriodFormatter getPeriodFormatter() { 
    PeriodFormatter pf = new PeriodFormatterBuilder().printZeroRarelyFirst() 
     .appendYears().appendSuffix("y ", "y ") 
     .appendMonths().appendSuffix("m" , "m ") 
     .appendDays().appendSuffix("d ", "d ") 
     .appendHours().appendSuffix("h ", "h ") 
     .appendMinutes().appendSuffix("m ", "m ") 
     .appendSeconds().appendSuffix("s ", "s ") 
     .toFormatter(); 

    return pf; 
} 

그러나, 나는 내가 JodaTime의 간격을 정의해야하는 방식을 오해 생각 : 순간

, 나는이 코드를 가지고있다.

@Test 
public void foobar() { 
    try { 
     TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 
     SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy"); 
     long start = sdf.parse("10:30:00 24/06/2009").getTime(); 
     long end = sdf.parse("23:05:17 22/08/2009").getTime(); 
     System.out.println("Duration: " + formatDuration(start, end)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     fail("Could not test duration."); 
    } 
} 

I 수 (특히 날 부분에) 잘못 다음과 같은 출력 : 나는 다음과 같은 테스트 코드를하려고하면

Duration: 1m 1d 12h 35m 17s 

가 어떻게 JodaTime에서 올바른 기간을 정의합니까?


좋아, 사실, 난 내 PeriodFormatter이 주를 추가하는 것입니다에 잊었 것을.

Duration: 1m 4w 1d 12h 35m 17s 

그래서 제 질문은 조금 변경 : 달 대신 주 + 일의 일 수를 표시하는 방법이 있나요 내가 주를 추가하면 그래서, 내가 올바른 다음과 같은 출력을 얻을? 대신 갖는 다른 단어에서 :

Duration: 1m 4w 1d 12h 35m 17s 

내가 갖고 싶어 :

Duration: 1m 29d 12h 35m 17s 
+0

제쳐두고 Joda 포맷터가 아닌 Joda DateTimeFormat 및 관련 클래스를 사용하는 것이 좋습니다. –

답변

5

이보십시오.

Period period = interval.toPeriod(PeriodType.yearMonthDayTime()); 

마침표를 지정하기 전에.

+1

표준 시간대에 포함 된 주를 인쇄하지 않는 것이 문제입니다. –

관련 문제