如何将持续时间字符串(如PT3M33S)格式化为HH:mm:ss

时间:2017-12-08 12:22:08

标签: android date simpledateformat duration

我一直在搜索有关此特定日期类型的StackOverflow的帖子,我也检查了谷歌的搜索引擎以验证此日期类型的名称。到目前为止,我所学到的是Google的日期类型格式,我不知道它的名称(例如GMT ..)。

日期,实际上是“计时器”我从JSON对象中提取并在textView中显示它,它是字符串类型:

duration:"PT3M33S" 

浏览网页我看到你有一个日期格式和简单格式,但当我尝试“翻译”格式时,PT不能代表任何东西作为AM PM支架,它被翻译成符号“a”和类似小时(HH),分钟(MM)......

如果有人能解释我这是什么类型的dateformat,我怎么能强制它显示HH:mm:ss以及字符串所以我可以显示到terxtView?

1 个答案:

答案 0 :(得分:1)

您可以使用 java.time.Duration,它以 ISO-8601 standards 为模型,并作为 JSR-310 implementation 的一部分与 Java-8 一起引入。 Java-9 引入了一些更方便的方法。

如果您浏览了上述链接,您可能已经注意到 PT3M33S 指定了 3 分 33 秒的持续时间,您可以将其解析为 Duration 对象,然后从该对象中取出可以通过从中获取天数、小时数、分钟数、秒数来创建根据您的要求格式化的字符串。

演示:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        String strIso8601Duration = "PT3M33S";

        Duration duration = Duration.parse(strIso8601Duration);
        // Default format
        System.out.println(duration);

        // Custom format
        // ####################################Java-8####################################
        String formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHours() % 24,
                duration.toMinutes() % 60, duration.toSeconds() % 60);
        System.out.println(formattedElapsedTime);
        // ##############################################################################

        // ####################################Java-9####################################
        formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHoursPart(), duration.toMinutesPart(),
                duration.toSecondsPart());
        System.out.println(formattedElapsedTime);
        // ##############################################################################
    }
}

输出:

PT3M33S
00:03:33
00:03:33

Trail: Date Time 了解现代日期时间 API。