如何将类似PT3M33S的持续时间字符串格式化为HH:MM:SS

2022-08-24 00:00:00 date android duration simpledateformat

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

日期,实际上是我从JSON对象中提取的"Timer",并将其显示在TextView中,它是字符串类型:

duration:"PT3M33S" 

浏览网络时,我看到你有一种日期格式和简化格式,但当我试图"翻译"这种格式时,PT并不代表AM PM所代表的任何内容,它被翻译成符号"a"和类似小时(HH)、分钟(MM)...

如果有人能解释一下这是什么类型的日期格式,以及如何强制它以字符串形式显示hh:mm:ss以便可以显示到terxtView?


解决方案

您可以使用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。

  • 出于任何原因,如果您必须坚持使用Java 6或Java 7,您可以使用ThreeTen-Backport,它将大部分java.time功能移植到Java 6&;7。
  • 如果您正在为Android项目工作,但您的Android API级别仍然不符合Java-8,请勾选Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。

相关文章