将字符串转换为毫秒

时间:2014-09-04 19:48:45

标签: java date time

如何将字符串转换为秒?

我希望它支持一个无数的部分(" 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);
        }
    }    

3 个答案:

答案 0 :(得分:2)

不要重新发明轮子。

ISO 8601

ISO 8601标准为日期时间值定义了各种字符串格式。其中一种格式是DurationsPnYnMnDTnHnMnST将日期部分与时间部分分开。例如,“P3Y6M4DT12H30M5S”表示持续时间为“三年,六年,四天,十二小时,三十分钟和五秒”。

每个块都是可选的,例如PT30M半小时。

约达时间

Joda-Time库和java.time package(捆绑在Java 8中)都使用ISO 8601作为解析和生成日期时间值的字符串表示的默认值。这包括PnYnMnDTnHnMnS格式。

Joda-Time提供三个课程,用于处理一段时间:IntervalPeriodDuration。 (请注意,这些术语不是标准化的,在不同的上下文中使用的方式不同。)

搜索StackOverflow

搜索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 + ...;