结合java.util.Dates来创建日期时间

我目前有两个UI组件用于指定日期和时间。 两个组件分别返回表示日历日期和时间的java.util.Date实例。 我的问题是:

组合这些值以创建表示日期和时间的java.util.Date实例的最佳方法是什么? 我想避免依赖Joda或其他第三方库。

我目前的解决方案看起来像这样(但有更好的方法吗?):

 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(); 

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

您可以将此已弃用的代码转换为日历以获取解决方案。

然后我的回答是: 不,如果不使用joda,你就无法做得更好

NB

jodatime很快将通过JSR 310进行标准化

我认为如果不使用Joda时间,你的方法是最好的。 使用SimpleDateFormats的解决方案可能会使用更少的行,但实际上并没有给您带来任何好处。

使用日历

 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(); }