#java #date #time
#java #Дата #время
Вопрос:
Я написал следующий код, но я всегда просто получаю…
4838399999 секунд — это: 59 минут — это: 59 часов — это: 23 дня — это: 7
Calendar xmas = Calendar.getInstance();
final Calendar now = Calendar.getInstance();
xmas.set(Calendar.YEAR, 2011);
xmas.set(Calendar.MONTH, Calendar.DECEMBER);
xmas.set(Calendar.DAY_OF_MONTH, 25);
long milliseconds1 = now.getTimeInMillis();
long milliseconds2 = xmas.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
System.out.println(diff);
diff = diff / 1000;
final long diffSeconds = diff % 60;
System.out.println("Seconds is : " diffSeconds);
diff = diff / 60;
final long diffMinutes = diff % 60;
System.out.println("Minutes is : " diffMinutes);
diff = diff / 60;
final long diffHours = diff % 60;
System.out.println("Hours is : " diffHours);
diff = diff / 24;
final long diffDays = diff % 24;
System.out.println("Days is : " diffDays);
Может ли кто-нибудь увидеть что-то неправильное в этой логике, чтобы найти дни, часы, минуты и секунды до Рождества?
Ответ №1:
Когда вы делаете:
diff = diff / 1000;
вы постоянно теряете остаток. Это должно быть что-то вроде:
long seconds = diff / 1000; // seconds is milliseconds / 1000
long milliseconds = diff % 1000; // remainder is milliseconds that are not composing seconds.
long minutes = seconds / 60;
seconds = seconds % 60;
long hours = minutes / 60;
minutes = minutes % 60;
Тот же шаблон последних четырех продолжается.
Комментарии:
1. Ну, ему больше не нужен остаток, так что это действительно не проблема.
2. @ruakh, ты прав. Я прочитал это слишком быстро и подумал
milliseconds
, что где-то использовался.
Ответ №2:
Эти две строки неверны:
final long diffHours = diff % 60
final long diffDays = diff % 24;
Кроме того, вы не устанавливаете часы / минуты / секунды / миллисекунды xmas
, поэтому он получает часы, минуты и секунды с текущего времени. Например, если вы запустите программу в 4:30:20 утра, то это даст вам время до 4:30:20 утра на Рождество. Вероятно, вам нужно время до 00:00:00 на Рождество.