在Java中添加两个时间字符串

时间:2015-02-17 20:45:48

标签: java string

在java中我试图采用一种具有一种自定义格式的时间尺度然后我试图将它添加到另一个时间尺度并以相同的格式输出它。 我的日期格式为11d 23h 13m 12s。然后我想拿这个字符串,把它添加到像1d 0h 0m 3s这样的东西。然后输出12d 23h 13m 15s。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

一般来说,如果你试图操纵时间,那么为了这个目的使用专用类会更好 - 在Java 8中,你需要手动将两个字符串解析为java.time.Duration s,使用Duration.plus(Duration)添加它们,然后使用Duration的各种to*方法来构建结果字符串。

如果你对输入和输出格式有一些控制权,你可以改变它们以匹配持续时间的格式并节省一些工作。

答案 1 :(得分:0)

我认为你需要一个 StringBuilder

Correct way to use StringBuilder

一个例子:

StringBuilder和SystemFormat(你可以制作新的字符串)。

int KeepingTheSeconds = 5;
StringBuilder timerBuilder = new StringBuilder(String.format("00:%02d",KeepingTheSeconds));

答案 2 :(得分:0)

如果要从头开始实现它,可以使用正则表达式并执行一些计算:

package stackoverflow;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    static Pattern p = Pattern.compile("(\\d+)d (\\d+)h (\\d+)m (\\d+)s");

    private static void add(String s, int[] a) {
        Matcher m = p.matcher(s);
        m.find();       
        for (int i = 0; i < a.length; i++)
            a[i] += Integer.parseInt(m.group(i + 1));
    }

    private static String calculate(String s1, String s2) {
        int a[] = new int[4];
        add(s1, a);
        add(s2, a);
        if (a[3] >= 60) {
            a[3] -= 60;
            a[2]++;
        }
        if (a[2] >= 60) {
            a[2] -= 60;
            a[1]++;
        }
        if (a[1] >= 24) {
            a[1] -= 24;
            a[0]++;
        }
        return String.format("%dd %dh %dm %ds", a[0], a[1], a[2], a[3]);
    }

    public static void main(String args[]) {
        String s1 = "11d 24h 13m 12s";
        String s2 = "1d 0h 0m 3s";
        System.out.println(calculate(s1, s2));
    }
}

这给出了输出:

13d 0h 13m 15s

上述实施不会对格式错误的输入进行任何检查。