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