这是关于 Java 日历以及我们在多伦多今天夏令时更改后遇到的影响。
下面是代码
Date date = new Date(); //Sun Mar 11 00:00:00 EST 2018
Integer time = 349;
Calendar scheduleDateCal = Calendar.getInstance();
scheduleDateCal.setTime(date);
scheduleDateCal.set(Calendar.MINUTE, 0);
scheduleDateCal.set(Calendar.HOUR_OF_DAY, 0);
String strSchAdminTime = String.valueOf(time);
Integer schAdminMinute = time;
if (strSchAdminTime.length() >= 2) {
schAdminMinute = Integer.valueOf(strSchAdminTime.substring(strSchAdminTime.length()-2));
}
if(time>60){
Integer schAdminHour = Integer.valueOf(strSchAdminTime.substring(0,strSchAdminTime.length()-2));
scheduleDateCal.add(Calendar.HOUR_OF_DAY, schAdminHour);
}else{
scheduleDateCal.add(Calendar.HOUR_OF_DAY, 0);
}
scheduleDateCal.add(Calendar.MINUTE, schAdminMinute);
System.out.println(scheduleDateCal.getTime());
我知道这段代码没有使用最佳实践,但是我需要为当前版本维护它。在这里,它使用整数来表示时间部分,然后有一个逻辑可以从中提取小时和分钟。
当我遵循逻辑时,小时部分为 3。然后有一个逻辑将此时间添加到日历对象,其值为 'Sun Mar 11 00:00:00 EST 2018' 并带有以下语句
scheduleDateCal.add(Calendar.HOUR_OF_DAY, schAdminHour);
理论上,经过此计算,日历对象的值应为“Sun Mar 11 03:00:00 EDT 2018”。但是它返回“Sun Mar 11 04:00:00 EDT 2018”我知道从今天开始,夏令时时间将提前一小时。谁能帮我理解这一点
感谢帮助。