jodatime days тип периода проблема/ошибка

У меня проблема с jodatime api. Я не могу понять, почему этот тест не работает. Мне нужно решить, сколько дней, часов, минут и секунд у меня есть в X миллисекундах. Но значение дней не разрешено... есть идеи?

@Test
public void testTime() {
    long secs = 3866 * 24 * 35;
    long msecs = secs * 1000;
    //Period period = duration.toPeriod();


    PeriodType periodType = PeriodType.forFields(
            new DurationFieldType[]{
                    DurationFieldType.days(),
                    DurationFieldType.hours(),
                    DurationFieldType.minutes(),
                    DurationFieldType.seconds(),
            });
    Duration duration = Duration.standardSeconds(secs);
    Period period = duration.toPeriod(periodType, GregorianChronology.getInstance());

    System.out.println("days:" + period.getDays());
    System.out.println("hours:" + period.getHours());
    System.out.println("mins:" + period.getMinutes());
    System.out.println("seconds:" + period.getSeconds());
    PeriodFormatter periodFormatter = new PeriodFormatterBuilder()
            .printZeroAlways()
            .minimumPrintedDigits(2)
            .appendDays()
            .appendSeparator(":")
            .appendHours()
            .appendSeparator(":")
            .appendMinutes()
            .appendSeparator(":")
            .appendSecondsWithOptionalMillis()
            .toFormatter();
    StringBuffer stringBuffer = new StringBuffer();
    periodFormatter.printTo(stringBuffer, period);
    System.out.println(">>>" + stringBuffer);
}

выход дней:0 часов:902 минут:4 секунды:0 00:902:04:00


person fphilip    schedule 07.05.2011    source источник
comment
Это дубликат stackoverflow.com/questions/1440557/ joda-время-период-в-строку   -  person ditkin    schedule 07.05.2011


Ответы (2)


Вам нужно нормализовать период, используя:

Period normalizedPeriod = period.normalizeStandard();

or

Period normalizedPeriod = period.normalizeStandardPeriodType();

Затем вы можете использовать normalizedPeriod и увидеть результаты, которые вы ищете. В качестве быстрого теста я изменил ваш тестовый пример junit и добавил строку:

period = period.normalizedStandard();

сразу после создания периода из продолжительности.

person ditkin    schedule 07.05.2011

Используемая вами хронология может не учитывать дни как точные. Вместо григорианской хронологии попробуйте использовать IOSChronology.getInstanceUTC().

person Nathan Ryan    schedule 07.05.2011