2016-01-06 55 views
2

在喬達時間,我需要找到2個週期的區別:的Java JodaTime時期格式化

PeriodFormatter formatter = new PeriodFormatterBuilder() 
      .printZeroAlways().minimumPrintedDigits(2) 
      .appendHours().appendSuffix(":").appendMinutes().appendSuffix(":").appendSeconds() 
      .toFormatter(); 
    Period period1 = formatter.parsePeriod("11:20:50"); 
    Period period2 = formatter.parsePeriod("13:40:00"); 
    Period difference1 = period1.minus(period2).normalizedStandard(); 
    System.out.println(formatter.print(difference1)); //shows -02:-19:-10 

結果是-02:-19:-10但我想顯示爲-02:19:10。在JodaTime中可以做什麼格式來實現?

+0

也許你找到[這種替代(HTTPS ://gist.github.com/MenoData/9e87a4d98d105d53dd37)有趣。我同意你的看法,負面持續時間應該只顯示前面的標誌,而不是組件之間。 XML-Schema具有相同的期望。 –

回答

1

我不認爲你可以配置PeriodFormatter自己做到這一點。 但是你可以檢查標準化週期是否有負值。如果是這樣,你添加減號自己,並追加的格式化版本否定期(所以在這種情況下,否定週期使得正)

PeriodFormatter formatter = new PeriodFormatterBuilder() 
     .printZeroAlways().minimumPrintedDigits(2) 
     .appendHours().appendSuffix(":").appendMinutes().appendSuffix(":").appendSeconds() 
     .toFormatter(); 
Period period1 = formatter.parsePeriod("11:20:50"); 
Period period2 = formatter.parsePeriod("13:40:00"); 
Period difference1 = period1.minus(period2).normalizedStandard(); 
String formatted; 
if (difference1.toStandardSeconds().get(DurationFieldType.seconds()) < 0) { 
    formatted = "-" + formatter.print(difference1.negated()); 
} else { 
    formatted = formatter.print(difference1); 
} 
System.out.println(formatted); 
+0

joda版本1.6.2中不支持joda Period.negated()?這種方法有沒有其他選擇? – hades