2011-05-24 147 views
0

我格式化如下我的約會:JodaTime日期格式問題

String inputDateString = aMessage.getString("updated_at"); 
         DateTimeFormatter fmt = ISODateTimeFormat.dateTimeNoMillis(); 

         DateTime date = fmt.parseDateTime(inputDateString); 
         DateTime now = new DateTime(); 
         Period period = new Period(date, now); 

         PeriodFormatter formatter = new PeriodFormatterBuilder() 
          .appendSeconds().appendSuffix(" seconds ago\n") 
          .printZeroNever() 
          .toFormatter(); 

         String elapsed = formatter.print(period); 

         dateTextView.setText(elapsed); 

我希望能夠證明:

3 seconds ago if the period is less than 60 seconds 
3 minutes ago if the period is less than 60 minutes 
3 hours ago is the period is less than X hours 
3 days ago if the period is less than X days 

等等,等等

我怎樣才能實現這個?

回答

3

查看Period上的可用方法,特別是那些諸如toStandardSeconds()的方法。使用這些應該是簡單的實現你以後有一些if-else聲明作出檢查,如

if (period.toStandardSeconds().getSeconds() < 60) { 
    // form second-based string 
} 
else if (period.toStandardMinutes().getMinutes() < 60) { 
    // ... 

我覺得PeriodFormatter在這種情況下,一個紅色的鯡魚,因爲我不認爲這是可能的構建一個可以做你想做的事情的格式化程序 - 在if塊中,你可以獲得秒/小時/等等。直接使用與條件中相同的方法調用。

+0

似乎我無法將其與int進行比較。編譯時錯誤 '運算符<未定義爲參數類型分鐘,int' – 2011-05-24 16:57:53

+0

您如何看待'org.joda.time.Minutes'實例是否代表小於60分鐘?看看[API](http://joda-time.sourceforge.net/api-release/org/joda/time/Minutes.html),看看你是否可以自己解決(這並不困難) ! – 2011-05-24 17:01:38

2

您可以通過一系列if語句輕鬆實現此目的。如果這些都是您的全部要求,那麼您甚至可以考慮取消PeriodFormatter並直接從Period(通過toStandardSeconds()等)提取相關數據。

您當然可以使用period.toStandardSeconds()等來決定使用哪種格式。