2015-10-17 31 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); 
}