Java 将时间解析为日历

Java 将时间解析为日历,java,calendar,Java,Calendar,我想设置日历的时间部分。这就是我正在做的 Calendar calNow = Calendar.getInstance(); Calendar endWait = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); Date d1 = null; try { d1 = sdf.parse("14:45"); }catch(ParseException ex){ logger.er

我想设置日历的时间部分。这就是我正在做的

Calendar calNow = Calendar.getInstance();
Calendar endWait = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date d1 = null;
try {
   d1 = sdf.parse("14:45");
}catch(ParseException ex){
    logger.error("Error parsing time");
}
 endWait.setTime(d1);
Date waitTo = endWait.getTime();   
Date now = calNow.getTime();

“now”变量是正确的日期和时间,但是waitTo应该是今天的日期和时间14:45,但是是明天的02:45。

对我来说,它不是明天,而是waitTo=Thu Jan 01 14:45:00 CET 1970

原因可在SimpleDataFormat的中找到:

此解析操作使用日历生成日期。所有的 日历的日期时间字段在解析之前被清除,并且 日历的日期时间字段的默认值用于任何 缺少日期时间信息。例如,项目的年值 如果没有给出年份值,则解析的日期为1970年,带有GregorianCalendar 从解析操作

Calendar.setTime()将使用传递的日期实例的日期和时间信息。 要仅更新等待时间的小时和分钟,您可以:

    Calendar tmpCal=Calendar.getInstance();
    tmpCal.setTime(d1);
    endWait.set(Calendar.HOUR_OF_DAY,tmpCal.get(Calendar.HOUR_OF_DAY));
    endWait.set(Calendar.MINUTE, tmpCal.get(Calendar.MINUTE));
这样,endWait的日、月、年部分将不会更改