2009-12-21 68 views
3

在Java中,我有一個長整型,表示以毫秒爲單位的時間段。時間段可以是從幾秒到幾周的任何時間。我想用適當的單位以字符串的形式輸出這段時間。格式化一段時間

例如3,000應輸出爲「3秒」,61,200,000應輸出爲「17小時」,1,814,400,000應輸出爲「3周」。理想情況下,我也可以微調子單元的格式,例如, 62,580,000可能會輸出爲「17小時23分鐘」。

是否有任何現有的Java類可以處理這個問題?

回答

7

Joda庫可以爲你做的:

PeriodFormatter yearsAndMonths = new PeriodFormatterBuilder() 
.printZeroAlways() 
.appendYears() 
.appendSuffix(" year", " years") 
.appendSeparator(" and ") 
.printZeroRarely() 
.appendMonths() 
.appendSuffix(" month", " months") 
.toFormatter(); 
0
 //Something like this works good too   
     long period = ...; 
     StringBuffer sb = new StringBuffer(); 
     sb.insert(0, String.valueOf(period % MILLISECS_IN_SEC) + "%20milliseconds"); 
     if (period > MILLISECS_IN_SEC - 1) 
      sb.insert(0, String.valueOf(period % MILLISECS_IN_MIN/MILLISECS_IN_SEC) + "%20seconds,%20"); 
     if (period > MILLISECS_IN_MIN - 1) 
      sb.insert(0, String.valueOf(period % MILLISECS_IN_HOUR/MILLISECS_IN_MIN) + "%20minutes,%20"); 
     if (period > MILLISECS_IN_HOUR - 1) 
      sb.insert(0, String.valueOf(period % MILLISECS_IN_DAY/MILLISECS_IN_HOUR) + "%20hours,%20"); 
     if (period > MILLISECS_IN_DAY - 1) 
      sb.insert(0, String.valueOf(period/MILLISECS_IN_DAY) + "%20days,%20"); 

     return sb.toString(); 
+0

這是一個醜陋的做法。 – Dariusz 2013-02-14 14:10:02