Это касается календаря 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. Затем есть логика, чтобы добавить это время в объект Calendar со значением «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». Я знаю, что с сегодняшнего дня время будет идти на час вперед с переходом на летнее время. Может ли кто-нибудь помочь мне понять это
Цените помощь.
Calendar
иDate
давно устарели, и работать с современным API намного приятнее. - person Ole V.V.   schedule 11.03.2018java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь являются устаревшими, замененными java.time классы, встроенные в Java 8 и Java 9 . См. Руководство от Oracle. - person Basil Bourque   schedule 22.03.2018