将字符串随时间转换为分钟

时间:2017-11-16 07:53:17

标签: android time type-conversion

我正在开发一款Android应用,它将时间(持续时间)值作为字符串。

例如,应用程序可以获得如下值:6小时43分钟

或类似值:15分钟

我正在寻找一种方法,可以在几分钟内将此字符串转换为整数值。

我尝试过使用此功能,但我无法提取所需的值:

str = str.replaceAll("[^\\d.]", "");

修改

可能有6小时的结果,唯一已知的条件是分钟总是四舍五入为整数,最小值为1分钟

7 个答案:

答案 0 :(得分:3)

使用正则表达式获取每对数字/ time_unit。您可以使用以下命令轻松解析:

(\\d+) (\\w+)
  • 第1组:数值
  • 第2组:时间单位

    (请注意,我在两者之间使用了一个空格(如果需要,可以是可选的)

使用Java Pattern类来使用该正则表达式

    Pattern p = Pattern.compile("(\\d+) (\\w+)");

然后你只需要迭代每场比赛就可以得到这对夫妻type / value

    Matcher m = p.matcher(s);
    while(m.find()){
        String type = m.group(2);
        int value = Integer.parseInt(m.group(1))
        ...
    }

由此,只需使用开关将数字转换为分钟并将其添加到变量中,省略break以获得一个漂亮(但效率不高)的转换器:

switch(type){
//Add more time unit in the correct order if needed
case "days":
    value *= 24;
case "hours":
    value *= 60;
case "mins":
    mins += value;
    break;
}

每种类型都会将值转换为正确的分钟数,最后,您将得到几分钟的结果。

答案 1 :(得分:2)

问题:如果没有额外的条件,你几乎不知道如下: 15小时15分钟将以相同的整数值存储,您最终需要在某些条件下区分它们以满足所有问题。

提出这个问题,您可以通过使用String拆分案例来实现所有这些,但您需要手动满足所有情况,记住用户可以使用任何拼写单词,如小时可以小时等等

答案 2 :(得分:2)

您可以在空白处拆分String并使用数组中的值。

String value1 = "6 hours 43 mins";
String value2 = "15 mins";

String[] resultList1 = value1.split(" ");
String[] resultList2 = value2.split(" ");

int minutes1 = 0;
int minutes2 = 0;

if(resultList1.length == 4) {
  minutes1 = Integer.parseInt(resultList1[0]) * 60 + Integer.parseInt(resultList1[2]);
} else {
  minutes1 = Integer.parseInt(resultList1[0]);
}

if(resultList2.length == 4) {
  minutes2 = Integer.parseInt(resultList2[0]) * 60 + Integer.parseInt(resultList2[2]);
} else {
  minutes2 = Integer.parseInt(resultList2[0]);
}

System.out.println(minutes1);
System.out.println(minutes2);

结果是:

403
15

答案 3 :(得分:1)

如果您可以分别获得每分钟和每小时,则可以使用string.replace("mins", ""),然后使用Integer.parseInt()。 如果你像6小时43分钟一样进行上瘾,你必须分开弦乐。

答案 4 :(得分:1)

我不确定这是否可以在一个正则表达式中完成,但如果我是你,我会使用不同的正则表达式来查找小时数,分钟数,秒数等。

给定您提到的格式的字符串,您可以先使用此正则表达式提取小时数:

\d+(?= hours?)

然后提取分钟数:

\d+(?= mins?)

如果输入字符串中出现秒数,您也可以使用它来提取秒数:

\d+(?= secs?)

如果任何正则表达式不匹配,则表示字符串中没有该信息。

答案 5 :(得分:1)

如前面的答案所示,String split()或Pattern Matcher可以正常工作。我不确定哪个更有效率,但在这种情况下它可能无关紧要。我的版本:

String timeStr = "2 hours 15 mins";
String[] parts = timeStr.split(" ");

int totalMins = 0;
for(int i=1; i< parts.length; i+=2) {
    // Add checking for "days", etc., if necessary.
    if(parts[i].equals("hours")) {
        int h = Integer.parseInt(parts[i-1]);
        totalMins += 60 * h;
    } else if(parts[i].equals("mins")) {
        int m = Integer.parseInt(parts[i-1]);
        totalMins += m;
    }
}

System.out.println("totalMins = " + totalMins);
>> totalMins = 135

答案 6 :(得分:1)

String time = "6 hours 43 mins";//or (43 mins) or (6 hours)
int h, m;
String[] parts = time.split(" ");
if (parts.length == 4) {
    h = parts[1];
    m = parts[3];
} else if (parts.length == 2) {
    if (parts[1].isEqualTo("hours") {
        h = parts[0];
    } else if (parts[1].isEqualTo("mins") {
        m = parts[0];
    }
}
return h*60+m;