格式化一段时间

时间:2009-12-21 03:44:50

标签: java time formatting

在Java中,我有一个长整数,表示一段时间(以毫秒为单位)。时间段可以是从几秒到几周的任何时间段。我想将此时间段输出为具有适当单位的字符串。

例如,3,000应输出为“3秒”,61,200,000应输出为“17小时”,1,814,400,000应输出为“3周”。

理想情况下,我也可以微调子单元的格式,例如62,580,000可能输出为“17小时23分钟”。

是否有任何现有的Java类可以处理这个问题?

4 个答案:

答案 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();