我有一个规范,它会在成功交易后返回付款历史JSON。第三方JSON响应具有交易所用总时间的字段。例如,在执行付款历史记录时花费的总时间是“00:10:10.0”。如何将此String对象格式转换为整数原语。
答案 0 :(得分:3)
如果您不介意使用外部库,那么使用Joda's org.joda.time.LocalTime
可以帮助解析字符串:
String duration = "00:10:10.0";
int seconds = LocalTime.parse(duration).getMillisOfDay() / 1000;
//returns 610
请注意,由于您遵守ISO格式,因此您甚至不需要明确指定解析后的格式。
此外,如果你已经使用Java 8,那么Joda被用作那里可用的新日期/时间库的灵感,因此你会在标准库中找到类似的类:LocalTime < / p>
答案 1 :(得分:1)
Radyk的回答是正确的。由于问题提到ISO 8601持续时间,我将添加该字符串输出。
java.time框架内置于Java 8及更高版本中。灵感来自Joda-Time。由ThreeTen项目扩展。带到Java 6&amp; 7由ThreeTen-Backport项目完成,由ThreeTenABP项目到Android。
String durationAsLocalTimeString = "00:10:10.0";
LocalTime durationAsLocalTime = LocalTime.parse( durationAsLocalTimeString );
Duration duration = Duration.between( LocalTime.MIN , durationAsLocalTime );
String output = duration.toString();
PT10M10S
PT10M10S
的输出是Duration format定义的PnYnMnDTnHnMnS
的标准ISO 8601。 P
标记开头,T
将年 - 月 - 日部分与小时 - 分 - 秒部分分开。
我建议以这种格式序列化字符串。使用诸如00:10:10.0
之类的时间格式来表示经过的时间是令人困惑和容易出错的。 ISO 8601格式明显且直观,解决了模糊问题。
在解析/生成日期时间值的文本表示时,java.time和Joda-Time默认使用这些ISO 8601格式。
Duration duration = Duration.parse( "PT10M10S" );