解析日历的时间

时间:2014-07-30 12:43:21

标签: 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.error("Error parsing time");
}
 endWait.setTime(d1);
Date waitTo = endWait.getTime();   
Date now = calNow.getTime();

"现在"变量是正确的日期和时间,但waitTo预计是今天的日期和时间14:45,但明天是02:45。

2 个答案:

答案 0 :(得分:1)

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

可以在SimpleDateFormat的javadoc中找到原因:

  

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

答案 1 :(得分:1)

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

    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的日,月,年部分不会改变。