用Java解析时间字符串

时间:2014-11-07 07:22:51

标签: java parsing

我有一个规范,它会在成功交易后返回付款历史JSON。第三方JSON响应具有交易所用总时间的字段。例如,在执行付款历史记录时花费的总时间是“00:10:10.0”。如何将此String对象格式转换为整数原语。

2 个答案:

答案 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.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

ISO 8601持续时间格式

PT10M10S的输出是Duration format定义的PnYnMnDTnHnMnS的标准ISO 8601P标记开头,T将年 - 月 - 日部分与小时 - 分 - 秒部分分开。

我建议以这种格式序列化字符串。使用诸如00:10:10.0之类的时间格式来表示经过的时间是令人困惑和容易出错的。 ISO 8601格式明显且直观,解决了模糊问题。

在解析/生成日期时间值的文本表示时,java.time和Joda-Time默认使用这些ISO 8601格式。

Duration duration = Duration.parse( "PT10M10S" );