组合 java.util.Dates 以创建日期时间

2022-09-02 01:43:56

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

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

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

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

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

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

那么我的答案是:不,不使用joda,你就无法做得更好

jodatime 很快将与 JSR 310 一起标准化


答案 2

我认为你的方法就是你在不使用Joda时间的情况下可能得到的最好的方法。使用 SimpleDateFormats 的解决方案可能会使用更少的行,但并没有真正给您带来任何好处。