Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Combining java.util.Dates to create a date-time

Tags:

java

datetime

I have current have two UI components used to specify a date and a time. Both components return java.util.Date instances representing the calendar date and time respectively. My question is:

What is the best way to combine these values to create a java.util.Date instance representing the date and time? I would like to avoid dependencies on Joda or other 3rd party libraries.

My current solution looks like this (but is there a better way?):

Date date = ... // Calendar date
Date time = ... // Time

Calendar calendarA = Calendar.getInstance();
calendarA.setTime(date);

Calendar calendarB = Calendar.getInstance();
calendarB.setTime(time);

calendarA.set(Calendar.HOUR_OF_DAY, calendarB.get(Calendar.HOUR_OF_DAY));
calendarA.set(Calendar.MINUTE, calendarB.get(Calendar.MINUTE));
calendarA.set(Calendar.SECOND, calendarB.get(Calendar.SECOND));
calendarA.set(Calendar.MILLISECOND, calendarB.get(Calendar.MILLISECOND));

Date result = calendarA.getTime();
like image 711
Adamski Avatar asked Aug 11 '09 12:08

Adamski


People also ask

Does Java Util date have time?

No time data is kept. In fact, the date is stored as milliseconds since the 1st of January 1970 00:00:00 GMT and the time part is normalized, i.e. set to zero. Basically, it's a wrapper around java. util.

How do I add 7 days to Java Util date?

Adding Days to the given Date using Calendar class Add the given date to the calendar by using setTime() method of calendar class. Use the add() method of the calendar class to add days to the date. The add method() takes two parameter, i.e., calendar field and amount of time that needs to be added.


3 Answers

public Date dateTime(Date date, Date time) {
    return new Date(
                     date.getYear(), date.getMonth(), date.getDay(), 
                     time.getHours(), time.getMinutes(), time.getSeconds()
                   );
}

you can corvert this deprecated code to Calendar obtaining your solution.

Then my answer is: no, you cannot do better without using joda

NB

jodatime soon will be standardized with JSR 310

like image 73
dfa Avatar answered Oct 04 '22 16:10

dfa


I think you're approach is the best you're likely to get without using Joda time. A solution using SimpleDateFormats might use fewer lines, but is not really giving you any benefit.

like image 24
Rich Seller Avatar answered Oct 04 '22 17:10

Rich Seller


Using Calendar

public Date dateTime(Date date, Date time) {

    Calendar aDate = Calendar.getInstance();
    aDate.setTime(date);

    Calendar aTime = Calendar.getInstance();
    aTime.setTime(time);

    Calendar aDateTime = Calendar.getInstance();
    aDateTime.set(Calendar.DAY_OF_MONTH, aDate.get(Calendar.DAY_OF_MONTH));
    aDateTime.set(Calendar.MONTH, aDate.get(Calendar.MONTH));
    aDateTime.set(Calendar.YEAR, aDate.get(Calendar.YEAR));
    aDateTime.set(Calendar.HOUR, aTime.get(Calendar.HOUR));
    aDateTime.set(Calendar.MINUTE, aTime.get(Calendar.MINUTE));
    aDateTime.set(Calendar.SECOND, aTime.get(Calendar.SECOND));

    return aDateTime.getTime();
}   
like image 38
jcarlos78 Avatar answered Oct 04 '22 16:10

jcarlos78