jodatime天期类型问题/错误

时间:2011-05-07 11:27:06

标签: java time jodatime

我对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

2 个答案:

答案 0 :(得分:1)

您正在使用的年表可能不会认为精确的日子。而不是GregorianChronology,尝试使用IOSChronology.getInstanceUTC()

答案 1 :(得分:1)

您需要使用以下标准化期间

Period normalizedPeriod = period.normalizeStandard();

Period normalizedPeriod = period.normalizeStandardPeriodType();

然后您可以使用normalizedPeriod并查看您要查找的结果。 作为一个快速测试,我修改了你的junit测试用例并添加了一行:

period = period.normalizedStandard();

在您从持续时间创建期间后立即。