Sum two dates in Java

前端 未结 9 639
夕颜
夕颜 2020-11-27 07:47

How can I add two dates in Java?

Example: The sum of \"2010-01-14 19:16:17\" \"0000-10-03 01:10:05\"
would result in \"2010-11-17 20:26:22\".

I know how

相关标签:
9条回答
  • 2020-11-27 08:13

    Don't sum the time in millis of the two dates!

    Date d1 = new Date();
    Date d2 = new Date();
    Date dTotal = new Date(d1.getTime() + d2.getTime());
    System.out.println(dTotal); // Incorrect! Misses about 1970 years.
    

    Just clone the Calendar and add the datetime parts one by one.

    Calendar c1 = Calendar.getInstance();
    Calendar c2 = Calendar.getInstance();
    Calendar cTotal = (Calendar) c1.clone();
    cTotal.add(Calendar.YEAR, c2.get(Calendar.YEAR));
    cTotal.add(Calendar.MONTH, c2.get(Calendar.MONTH) + 1); // Months are zero-based!
    cTotal.add(Calendar.DATE, c2.get(Calendar.DATE));
    cTotal.add(Calendar.HOUR_OF_DAY, c2.get(Calendar.HOUR_OF_DAY));
    cTotal.add(Calendar.MINUTE, c2.get(Calendar.MINUTE));
    cTotal.add(Calendar.SECOND, c2.get(Calendar.SECOND));
    cTotal.add(Calendar.MILLISECOND, c2.get(Calendar.MILLISECOND));
    System.out.println(cTotal.getTime()); // Correct!
    

    Needless to say, JodaTime is smarter and cleaner with this.

    0 讨论(0)
  • 2020-11-27 08:15

    You want to do getTimeInMillis() on both those Calendars so you'll have two honest-to-goodness long values you can add up. You can then take the sum and stash it in a new Calendar using that Calendar's setTimeInMillis() method.

    Whether you want to add two Calendars as shown above or two Dates as shown in notnoop's answer is up to you, of course. The effect is similar, it just depends on what you want to do with the result. A Date is mostly just good for storing and/or converting to a String for printing out or displaying, whereas a Calendar will let you fiddle with the individual time values should you so choose.

    As others have mentioned, you're committing some conceptual no-no's in using a Date or Calendar, which are meant to store "real" dates and times, e.g. ones in the 20th or 21st century, as intervals, i.e. time spans. The classes in the standard Java library don't give you really useful tools to handle this, which is why the Joda classes were developed. All the cool kids in date/time processing use those; but on the other hand that involves downloading and managing a 3rd party library.

    0 讨论(0)
  • 2020-11-27 08:17

    As always, I would recommend the Java 8 date/time APIs or Joda for date/time work, since they are much more powerful and intuitive.

    You can add durations and periods to a DateTime object trivially. You can add minutes/seconds/months equally easily.

    However, you can't add two dates directly, since that doesn't really make sense. This is a powerful illustration of why Joda is a help - it stops you doing stuff that you really shouldn't be doing.

    0 讨论(0)
  • 2020-11-27 08:17

    I am occasionally guilty of this practice too, storing time interval in a date object and using getTime() as suggested by notnoop.

    It works. Contrary to certain opinion, it certainly works. I just ignore that the interval could be representative of an unintended date. It is a quick and dirty way for me to add an interval, say, [6 years, 6 months, 6 days, 6 hours, 6 minutes, 6 seconds] to a date.

    0 讨论(0)
  • 2020-11-27 08:24

    notnoop answer is definitely correct. However, if you are going to do lots of processing of dates, times and intervals, I suggest that you look at class DateUtils in apache commons lang and at joda-time library.

    JDK7 will come with better support for some of the features that joda-time provides. Just saying ... it might be a consideration if your app makes heavy usage of this stuff.

    0 讨论(0)
  • 2020-11-27 08:24

    Use calendar class add method to add two dates in java.

    Calendar calendar=Calendar.getInstance();
    
    calendar.add(Calendar.Date,23);
    
    calendar.add(Calendar.Month,13);
    
    calendar.add(Calendar.Year,15);
    

    By using add method in Calendar class we can add day,month,year to the existing date.

    click here for complete program.

    0 讨论(0)
提交回复
热议问题