在java中添加溢出小时的字符串时间

时间:2015-10-17 03:10:03

标签: java datetime simpledateformat

我想用格式HH:mm:ss和特殊小时字段添加字符串时间。示例: "20:15:30"(字符串)添加"13:50:35"(字符串) - >我想要的结果:" 34:06:05" (字符串)。 我搜索过类似的代码:

    String time1="20:15:30";
    String time2="13:50:35";

    SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
    timeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date date1 = timeFormat.parse(time1);
    Date date2 = timeFormat.parse(time2);
    long sum = date1.getTime() + date2.getTime();

    String date3 = timeFormat.format(new Date(sum));
    System.out.println("The sum is "+ date3);

以上代码的结果:The sum is 10:06:05不是我想要的。怎么这么简单呢?

2 个答案:

答案 0 :(得分:2)

您可以简单地利用Java 8或Joda Time的持续时间功能。

例如,这只会创建一个持续时间,它是两次

的秒数之和
LocalTime lt1 = LocalTime.parse("20:15:30", DateTimeFormatter.ofPattern("HH:mm:ss"));
LocalTime lt2 = LocalTime.parse("13:50:35", DateTimeFormatter.ofPattern("HH:mm:ss"));

//long t = lt1.toSecondOfDay() + lt2.toSecondOfDay();
//Duration duration = Duration.ofSeconds(t);
Duration duration = Duration.between(lt2, lt1);
System.out.println(formatDuration(duration));

打印出34:06:05

formatDuration方法

public static String formatDuration(Duration duration) {

    long hours = duration.toHours();
    duration = duration.minusHours(hours);
    long minutes = duration.toMinutes();
    duration = duration.minusMinutes(minutes);
    long seconds = duration.getSeconds();

    return String.format("%02d:%02d:%02d", hours, minutes, seconds);
}

答案 1 :(得分:1)

SimpleDateFormat无法做到这一点,但您可以通过使用正则表达式解析输入并使用format方法格式化输出来自行完成。

private static String addTime(String ... times) {
    if (times.length < 2)
        throw new IllegalArgumentException("At least 2 times are required");
    Pattern timePattern = Pattern.compile("([0-9]+):([0-5][0-9]):([0-5][0-9])");

    // Parse times and sum hours, minutes, and seconds
    int hour = 0, minute = 0, second = 0;
    for (String time : times) {
        Matcher m = timePattern.matcher(time);
        if (! m.matches())
            throw new IllegalArgumentException("Invalid time: " + time);
        hour   += Integer.parseInt(m.group(1));
        minute += Integer.parseInt(m.group(2));
        second += Integer.parseInt(m.group(3));
    }

    // Handle overflow
    minute += second / 60;   second %= 60;
    hour   += minute / 60;   minute %= 60;

    // Format and return result
    return String.format("%02d:%02d:%02d", hour, minute, second);
}

测试

System.out.println(addTime("20:15:30", "13:50:35"));
System.out.println(addTime("20:15:30", "13:50:35", "20:15:30", "13:50:35"));
System.out.println(addTime("98765:43:21", "12:34:56"));

输出

34:06:05
68:12:10
98778:18:17