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