2015-10-17 75 views
0

我想用格式HH:mm:ss和特殊小时字段添加字符串时间。例如: "20:15:30"(string)add "13:50:35"(string) - >我想要的结果:“34:06:05”(字符串)。 我有搜索类似的代码:在java中添加溢出时间的字符串时间

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不是我想要的。如何简单的方法来做到这一点?

+0

的秒数的总和听起来更像是你正在谈论的持续时间或期间 – MadProgrammer

+0

我不清楚。我只想要增量小时字段。也许大的结果类似:“99999:15:05”。 – TungHarry

+0

是的,所以我们在谈论从0到 – MadProgrammer

回答

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 
+0

的时间,真的很感谢你! – TungHarry

2

你可以简单地采取任何的Java 8的或约达时间的持续能力优势。

例如,这只是简单地创建的持续时间是两个倍

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); 
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); 
}