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

时间:2009-08-11 12:44:26

标签: java datetime

我目前有两个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();

3 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

  

使用日历

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