Java添加格式为dd的日期:HH:mm:ss

我有三个日期作为String对象的格式: dd:HH:mm:ss

  • 00:1:9:14
  • 00:3:10:4
  • 00:3:39:49

如何在Java中添加这些日期以获得总和( 00:7:59:07 )?

示例代码:

 SimpleDateFormat sdf = new SimpleDateFormat("dd:HH:mm:ss"); Date d1 = sdf.parse("00:1:9:14"); Date d2 = sdf.parse("00:3:10:4"); Date d3 = sdf.parse("00:3:39:49"); System.out.println(d1); System.out.println(d2); System.out.println(d3); Date d = new Date(d1.getTime() + d2.getTime() + d3.getTime()); System.out.println(d); 

输出(错误):

 Wed Dec 31 01:09:14 IST 1969 Wed Dec 31 03:10:04 IST 1969 Wed Dec 31 03:39:49 IST 1969 Sun Dec 28 20:59:07 IST 1969 

dd格式包括该月的日期。 因此,如果您使用SimpleDateFormat (或Java Date因为它还包括一个月中的某一天),您的00值将会下溢。 相反,解析你的时间部分并自己做数学。

例如,您可以创建一个包含dayshoursminutesseconds的类TimePart

 static class TimePart { int days = 0; int hours = 0; int minutes = 0; int seconds = 0; static TimePart parse(String in) { if (in != null) { String[] arr = in.split(":"); TimePart tp = new TimePart(); tp.days = ((arr.length >= 1) ? Integer.parseInt(arr[0]) : 0); tp.hours = ((arr.length >= 2) ? Integer.parseInt(arr[1]) : 0); tp.minutes = ((arr.length >= 3) ? Integer.parseInt(arr[2]) : 0); tp.seconds = ((arr.length >= 4) ? Integer.parseInt(arr[3]) : 0); return tp; } return null; } public TimePart add(TimePart a) { this.seconds += a.seconds; int of = 0; while (this.seconds >= 60) { of++; this.seconds -= 60; } this.minutes += a.minutes + of; of = 0; while (this.minutes >= 60) { of++; this.minutes -= 60; } this.hours += a.hours + of; of = 0; while (this.hours >= 24) { of++; this.hours -= 24; } this.days += a.days + of; return this; } @Override public String toString() { return String.format("%02d:%02d:%02d:%02d", days, hours, minutes, seconds); } } 

然后你的测试用例就像

 public static void main(String[] args) { try { TimePart d1 = TimePart.parse("00:1:9:14"); TimePart d2 = TimePart.parse("00:3:10:4"); TimePart d3 = TimePart.parse("00:3:39:49"); System.out.println(d1); System.out.println(d2); System.out.println(d3); TimePart d4 = d1.add(d2).add(d3); System.out.println(d4); } catch (Exception e) { e.printStackTrace(); } } 

它似乎正确执行添加

 00:01:09:14 00:03:10:04 00:03:39:49 00:07:59:07 

上面的和是算术加法所以你需要一个ref –here d0(默认纪元)。 日期类有很多问题要小心……

 SimpleDateFormat sdf = new SimpleDateFormat("dd:HH:mm:ss"); Date d0 = sdf.parse("00:00:00:00"); // ref Date d1 = sdf.parse("00:01:09:14"); Date d2 = sdf.parse("00:03:10:04"); Date d3 = sdf.parse("00:03:39:49"); System.out.println(d0); System.out.println(d1); System.out.println(d2); System.out.println(d3); Date d = new Date(d1.getTime() + d2.getTime() + d3.getTime() - 2 * d0.getTime()); // impt System.out.println(d); 

注意: – 添加日期不是一件容易的事,请三思而后行。

 SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); String s1 = "01:02:03"; String s2 = "10:12:13"; Date d1 = format.parse(s1); Date d2 = format.parse(s2); int sec = d1.getSeconds() + d2.getSeconds(); int min = d1.getMinutes() + d2.getMinutes(); int hr = d1.getHours() + d2.getHours(); Time sum = new Time(hr, min, sec); System.out.println(sum); // Output: 11:14:16