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();
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.
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.
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
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.
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();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With