Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的时间字符串解析_Java_Parsing - Fatal编程技术网

Java中的时间字符串解析

Java中的时间字符串解析,java,parsing,Java,Parsing,我有一个规范,它将在成功交易后返回支付历史JSON。第三方JSON响应有一个字段,表示事务所用的总时间。例如,执行付款历史记录时花费的总时间为“00:10:10.0”。如何将此格式的字符串对象转换为整数原语。如果您不介意使用外部库,则使用org.joda.time.LocalTime可以帮助进行字符串解析: String duration = "00:10:10.0"; int seconds = LocalTime.parse(duration).getMillisOfDay() / 1000

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

如果您不介意使用外部库,则使用
org.joda.time.LocalTime
可以帮助进行字符串解析:

String duration = "00:10:10.0";
int seconds = LocalTime.parse(duration).getMillisOfDay() / 1000;
//returns 610
请注意,因为您遵守ISO格式,所以甚至不需要显式指定解析的格式


另外,如果您已经在使用Java 8,那么Joda被用作新的日期/时间库的灵感来源,因此您可以在标准库中找到类似的类:

如果您不介意使用外部库,那么使用
org.Joda.time.LocalTime
可以帮助进行字符串解析:

String duration = "00:10:10.0";
int seconds = LocalTime.parse(duration).getMillisOfDay() / 1000;
//returns 610
请注意,因为您遵守ISO格式,所以甚至不需要显式指定解析的格式


另外,如果您已经在使用Java 8,那么Joda被用作新的日期/时间库的灵感来源,因此您可以在标准库中找到类似的类:

Radyk的答案是正确的。由于问题提到ISO 8601 Duration,我将添加该字符串输出

java.time java.time框架内置于Java8及更高版本中。灵感来源于乔达时代。由ThreeTen项目扩展。通过ThreeTen Backport项目引入Java6和Java7,并通过该项目引入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
的输出是由定义的
PnYnMnDTnHnMnS
的标准。
P
标记开始,而
T
将年-月-日部分与时-分-秒部分分开

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

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

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

拉迪克的答案是正确的。由于问题提到ISO 8601 Duration,我将添加该字符串输出

java.time java.time框架内置于Java8及更高版本中。灵感来源于乔达时代。由ThreeTen项目扩展。通过ThreeTen Backport项目引入Java6和Java7,并通过该项目引入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
的输出是由定义的
PnYnMnDTnHnMnS
的标准。
P
标记开始,而
T
将年-月-日部分与时-分-秒部分分开

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

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

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

int
原语的含义是什么?到目前为止,您尝试了什么?@NorbertRadyk我想将这个特定字符串转换为long/double/int格式,因为规范中说这是事务所花费的总时间。我做了一个简单的拆分并计算秒数。正如规范中提到的ISO 8601格式,因此产生了混乱。想知道是否有什么特别的东西需要注意w.r.t格式。你有没有试着找到ISO 8601的规范并阅读?可能会有帮助…您的示例字符串不是。类似的问题:
int
原语的含义应该是什么?到目前为止,您尝试了什么?@NorbertRadyk我想将这个特定字符串转换为long/double/int格式,因为规范中说这是事务所花费的总时间。我做了一个简单的拆分并计算秒数。正如规范中提到的ISO 8601格式,因此产生了混乱。想知道是否有什么特别的东西需要注意w.r.t格式。你有没有试着找到ISO 8601的规范并阅读?可能会有帮助…您的示例字符串不是。类似问题: