Ну, я сейчас создаю приложение для Android, и мне нужно хранить день и считать, сколько дней до наступления этого дня.
Я сохраняю день на общих префе. Сначала я инициализирую календари.
Calendar next = Calendar.getInstance();
Calendar now = Calendar.getInstance();
Затем я устанавливаю «следующий» календарь
nday = prefs.getInt("d", 0);
nmonth = prefs.getInt("m",0);
nyear = prefs.getInt("y",0);
next.set(nyear, nmonth, nday);
Затем я делаю это, чтобы вычислить, сколько осталось дней.
diff =next.getTimeInMillis()-now.getTimeInMillis();
diffDays = diff / (24 * 60 * 60 * 1000);
output.setText(diffDays + " Days left");
А вот и проблема. Калькулятор работал отлично до 2 дней назад. Когда он должен был сказать «3 дня», он писал «2 дня», и все равно один день идет не так. Если я пытаюсь закрыть и открыть приложение, иногда оно вычисляет правильные дни, а иногда пропускает один день ... Может кто-то понимает, что не так? У меня есть diff и diffDays как долго. Я пытался разыграть их как int, но у меня все еще возникла та же проблема, иногда пишет 3 дня, иногда 2 ....
хорошо, я узнал, как решить эту проблему. Кажется, что getInstance имеет разницу в миллисекундах, поэтому я сделал это
Calendar now = Calendar.getInstance();
now.set(Calendar.HOUR_OF_DAY,00);
now.set(Calendar.MINUTE ,00);
now.set(Calendar.SECOND,00);
now.set(Calendar.MILLISECOND,00);
получить день от общих префер
nday = extras.getInt("nDay");
nmonth = extras.getInt("nMonth");
nyear = extras.getInt("nYear");
//set the calendar
next.set(nyear, nmonth, nday, 00, 00,00);
next.set(Calendar.MILLISECOND,00);
и, наконец, рассчитать разницу
long diff = 0;
diff = next.getTimeInMillis()-now.getTimeInMillis();
diffDays = diff / (24 * 60 * 60 * 1000);
output.setText(diffDays + " Days");
теперь я получаю реальную разницу без ошибок, спасибо всем за помощь!