我想设置日历的时间部分。这就是我正在做的事情
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。
答案 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的日,月,年部分不会改变。