TL;博士
Duration.parse(
"PT" +
"10:45".replace(":" , "M")
.replace("-" , "M")
.replace("." , "M")
.replace("," , "M")
+ "S"
).toMinutes()
“10:45” →PT10M45S→10
ISO 8601格式
的ISO 8601标准定义的时间跨度这样的格式不附着至时间线:PnYnMnDTnHnMnS
P
标记t他开始。 T
将小时 - 分钟 - 秒内的任意年 - 月 - 日分开。所以一个半小时是PT1H30M
。你十分钟四十五秒的例子是PT10M45S
。
执行简单的字符串操作将输入转换为此格式。
String input = "10:45" ;
String inputStandardized = "PT" +
input.replace(":" , "M")
.replace("-" , "M")
.replace("." , "M")
.replace("," , "M")
+ "S" ;
PT10M45S
Duration
解析作为Duration
。分析和生成字符串时,java.time类默认使用ISO 8601格式。所以不需要指定格式化模式。
Duration duration = Duration.parse(inputStandardized);
duration.toString():PT10M45S
可以使用Duration
对象做日期 - 时间数学,传递给plus
和minus
。所以你可能不需要分钟数作为整数。但你可以要求在这段时间内的总分钟数。
long minutes = duration.toMinutes();
看到这个code run live at IdeOne.com。
提示:在一段时间内使用时钟时间格式会造成麻烦。歧义导致混淆和错误。我建议使用标准ISO 8601格式的持续时间,因为它们被设计为明确,易于阅读和易于解析。
你可以删除Integer.valueOf(),(即使在当时,它会被autoboxed)。我认为JodaTime有这个选择。从日期时间获取分钟数/秒/无论如何 – Wietlol
为什么不直接忽略分隔符? int minute = Integer.parseInt(durationString.substring(0,2))* 60 + Integer.parseInt(durationString.substring(3))' – Andreas