在Java中,我有一個長整型,表示以毫秒爲單位的時間段。時間段可以是從幾秒到幾周的任何時間。我想用適當的單位以字符串的形式輸出這段時間。格式化一段時間
例如3,000應輸出爲「3秒」,61,200,000應輸出爲「17小時」,1,814,400,000應輸出爲「3周」。理想情況下,我也可以微調子單元的格式,例如, 62,580,000可能會輸出爲「17小時23分鐘」。
是否有任何現有的Java類可以處理這個問題?
在Java中,我有一個長整型,表示以毫秒爲單位的時間段。時間段可以是從幾秒到幾周的任何時間。我想用適當的單位以字符串的形式輸出這段時間。格式化一段時間
例如3,000應輸出爲「3秒」,61,200,000應輸出爲「17小時」,1,814,400,000應輸出爲「3周」。理想情況下,我也可以微調子單元的格式,例如, 62,580,000可能會輸出爲「17小時23分鐘」。
是否有任何現有的Java類可以處理這個問題?
的Joda庫可以爲你做的:
PeriodFormatter yearsAndMonths = new PeriodFormatterBuilder()
.printZeroAlways()
.appendYears()
.appendSuffix(" year", " years")
.appendSeparator(" and ")
.printZeroRarely()
.appendMonths()
.appendSuffix(" month", " months")
.toFormatter();
退房喬達時間的format package
參見在Apache公地DurationFormatUtils。
//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();
這是一個醜陋的做法。 – Dariusz 2013-02-14 14:10:02