在Java中,我有一个长整数,表示一段时间(以毫秒为单位)。时间段可以是从几秒到几周的任何时间段。我想将此时间段输出为具有适当单位的字符串。
例如,3,000应输出为“3秒”,61,200,000应输出为“17小时”,1,814,400,000应输出为“3周”。
理想情况下,我也可以微调子单元的格式,例如62,580,000可能输出为“17小时23分钟”。
是否有任何现有的Java类可以处理这个问题?
答案 0 :(得分:7)
Joda库可以为您做到这一点:
PeriodFormatter yearsAndMonths = new PeriodFormatterBuilder()
.printZeroAlways()
.appendYears()
.appendSuffix(" year", " years")
.appendSeparator(" and ")
.printZeroRarely()
.appendMonths()
.appendSuffix(" month", " months")
.toFormatter();
答案 1 :(得分:7)
另请参阅Apache commons中的DurationFormatUtils。
答案 2 :(得分:0)
查看joda-time的format package
答案 3 :(得分: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();