2014-11-14 83 views
2

我剛剛在Joda時間框架中測試了PeriodFormatterBuilder。當我將週數輸出添加到構建器時,計算的時間是正確的。但是,如果周不追加,究竟是我想要的,建設者只是下降7天:Joda時間PeriodFormatterBuilder

public class JodaTest { 
    public static void main(String[] args) { 

    // builder 1 (weeks inc.) 
    PeriodFormatterBuilder b1 = new PeriodFormatterBuilder(); 
    b1.appendYears().appendSuffix(" year", " years"); 
    b1.appendSeparator(" "); 
    b1.appendMonths().appendSuffix(" month", " months"); 
    b1.appendSeparator(" "); 
    // appends weeks ... 
    b1.appendWeeks().appendSuffix(" week", " weeks"); 
    b1.appendSeparator(" "); 
    b1.appendDays().appendSuffix(" day", " days"); 
    b1.appendSeparator(" "); 
    b1.printZeroIfSupported().minimumPrintedDigits(2); 
    b1.appendHours().appendSuffix(" hour", " hours"); 
    b1.appendSeparator(" "); 
    b1.appendMinutes().appendSuffix(" minutes"); 
    b1.appendSeparator(" "); 
    b1.appendSeconds().appendSuffix(" seconds"); 
    PeriodFormatter f1 = b1.toFormatter(); 

    // builder 2 (weeks not inc.) 
    PeriodFormatterBuilder b2 = new PeriodFormatterBuilder(); 
    b2.appendYears().appendSuffix(" year", " years"); 
    b2.appendSeparator(" "); 
    b2.appendMonths().appendSuffix(" month", " months"); 
    b2.appendSeparator(" "); 
    // does not append weeks ... 
    b2.appendDays().appendSuffix(" day", " days"); 
    b2.appendSeparator(" "); 
    b2.printZeroIfSupported().minimumPrintedDigits(2); 
    b2.appendHours().appendSuffix(" hour", " hours"); 
    b2.appendSeparator(" "); 
    b2.appendMinutes().appendSuffix(" minutes"); 
    b2.appendSeparator(" "); 
    b2.appendSeconds().appendSuffix(" seconds"); 
    PeriodFormatter f2 = b2.toFormatter(); 

    Period period = new Period(new Date().getTime(), new DateTime(2014, 12, 25, 0, 0).getMillis()); 

    System.out.println(f1.print(period)); 
    System.out.println(f2.print(period)); // 7 days missing? 
    } 
} 

打印出:

1 month 1 week 2 days 09 hours 56 minutes 21 seconds 
1 month 2 days 09 hours 56 minutes 21 seconds 

在第二行的日子值應爲「9天」。如何讓建造者總結正確的日期值?

回答

4

標準Period對象將時間段分爲年,月,周,天和時間字段。超過一週的持續時間將增加weeks字段,並且該字段days是,更多或更少的,將所述持續時間由7

其餘的PeriodFormatter僅僅打印該字段,因爲它們是Period對象內部。它不做任何計算。如果天數字段爲2,即使您未包含星期,它也會保留2

要獲得在未來的日子領域而不是幾周領域代表週期間,您應該創建一個不同類型的一段:

Period periodWithoutWeeks = new Period(
    Date().getTime(), 
    new DateTime(2014, 12, 25, 0, 0).getMillis(), 
    PeriodType.yearMonthDayTime()); 

或者假設你的週期轉換爲類型不周一個星期是一個標準的7天:

Period periodWithoutWeeks = period.normalizedStandard(PeriodType.yearMonthDayTime()); 

現在你可以用任何的格式化打印:

System.out.println(f2.print(periodWithoutWeeks)); 
+0

雖然很有希望,但會向我拋出異常:IllegalArgumentException:期間不支持「周」字段。 – Suma 2017-06-08 11:37:06

+0

@Suma權利。建議更正。 – RealSkeptic 2017-06-08 19:57:16