如何将类似PT3M33S的持续时间字符串格式化为HH:MM:SS
我一直在搜索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。
相关文章