Правильное определение длительности с использованием JodaTime - PullRequest
1 голос
/ 19 января 2010

Я создал метод, который принимает две даты (в миллисекундах) и возвращает предложение, которое указывает продолжительность между этими двумя датами.

На данный момент у меня есть этот код:

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.");
    }
}

, я получу следующий вывод, что неверно (особенно в части дня):

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

1 Ответ

5 голосов
/ 19 января 2010

Попробуйте это.

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

Перед форматированием периода.

...