将timeframe字符串转换为整数Java

时间:2014-01-05 20:38:48

标签: java string time integer

让我们说例如我有字符串1y2m1w5d1h,如何在几秒钟内将其转换为整数?

其中:

1y is 1 year
1m is 1 month
1w is 1 week
1d is 1 day
1h is 1 hour

但当然所有这些值都是可选的,并且可以更改。所以你可以1m2h 1个月和2个小时。

为简单起见,我们只说1个月是30天。

1 个答案:

答案 0 :(得分:2)

用这样的正则表达式解析它:

(\d+)([A-Za-z]+)

然后访问组2以确定类型。使用组1作为乘数。并将所有内容汇总在一起。

请注意,解析这样的字符串实际上没有意义,因为月份和年份的长度不同,具体取决于一年中的特定时刻。

Here is a rough demo不考虑数月和数年的差异:

public static void main (String[] args) throws java.lang.Exception
{
    Map<String, Long> times = new HashMap<String, Long>();
    times.put("y", 365L*24*60*60); // Or 366 days?
    times.put("m", 31L*24*60*60); // Or 30 days?
    times.put("w", 7L*24*60*60);
    times.put("d", 24L*60*60);
    times.put("h", 60L*60);


    String s = "1w3d4m";
    long sum = 0L;

    Matcher m = Pattern.compile("(\\d+)([A-Za-z]+)").matcher(s);
    while (m.find())
    {
        String type = m.group(2);
        String multiplier = m.group(1);
        sum += times.get(type) * Integer.parseInt(multiplier);
    }

    System.out.println(sum);
}

这是输出:

11577600