Ну, в настоящее время я создаю приложение для 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");
теперь я получаю реальную разницу без каких-либо ошибок, спасибо всем за вашу помощь!