如何将字符串转换为秒?
我希望它支持一个无数的部分(" 10m"," 5s"是部分)
例如:
" 10S" > 10
" 10m5s" > 605
" 1h1m1s" > 3661
所有类型的数据
s>秒
m>分钟
h>小时
d>天
w>周
M>月(资本化)
y>年
修改
尝试了一些代码,返回" 34822861"输入" 1s"时,其中时间是字符串。
Long mil = 0L;
Matcher matcher = Pattern.compile("\\d+\\D+").matcher(time);
while (matcher.find()) {
String s = matcher.group();
Long numb = Long.parseLong(s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)")[0]);
String type = s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)")[1];
switch(type){
case "s":
mil = mil + (numb);
case "m":
mil = mil + (numb * 60);
case "h":
mil = mil + (numb * 60 * 60);
case "d":
mil = mil + (numb * 60 * 60 * 24);
case "w":
mil = mil + (numb * 60 * 60 * 24 * 7);
case "M":
mil = mil + (numb * 60 * 60 * 24 * 30);
case "y":
mil = mil + (numb * 60 * 60 * 24 * 365);
}
}
答案 0 :(得分:2)
不要重新发明轮子。
ISO 8601标准为日期时间值定义了各种字符串格式。其中一种格式是Durations,PnYnMnDTnHnMnS
。 T
将日期部分与时间部分分开。例如,“P3Y6M4DT12H30M5S”表示持续时间为“三年,六年,四天,十二小时,三十分钟和五秒”。
每个块都是可选的,例如PT30M
半小时。
Joda-Time库和java.time package(捆绑在Java 8中)都使用ISO 8601作为解析和生成日期时间值的字符串表示的默认值。这包括PnYnMnDTnHnMnS
格式。
Joda-Time提供三个课程,用于处理一段时间:Interval
,Period
和Duration
。 (请注意,这些术语不是标准化的,在不同的上下文中使用的方式不同。)
搜索Stackoverflow以查找有关这些主题的数百个答案。
答案 1 :(得分:1)
尝试确保在每个案例后使用休息!
Long mil = 0L;
Matcher matcher = Pattern.compile("\\d+\\D+").matcher(time);
while (matcher.find()) {
String s = matcher.group();
Long numb = Long.parseLong(s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)")[0]);
String type = s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)")[1];
switch(type){
case "s":
mil = mil + (numb); break;
case "m":
mil = mil + (numb * 60); break;
case "h":
mil = mil + (numb * 60 * 60); break;
case "d":
mil = mil + (numb * 60 * 60 * 24); break;
case "w":
mil = mil + (numb * 60 * 60 * 24 * 7); break;
case "M":
mil = mil + (numb * 60 * 60 * 24 * 30); break;
case "y":
mil = mil + (numb * 60 * 60 * 24 * 365); break;
}
}
答案 2 :(得分:1)
在每break;
mil = mil + ...;