嗯,我目前正在为android构建一个应用程序,我需要存储一天并计算直到那一天到来的天数。在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天”,它仍然有一天错了。如果我尝试关闭并打开应用程序,有时它会计算正确的日期,有时会错过一天...有人可以理解最新的错误吗?我有差异和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");
现在我得到了真正的差别没有任何错误,谢谢大家的帮助!
当您创建日期时,您是否正在清理它们,以便它们适当地参考午夜而不是创建它们的小时和分钟? –
我使用Calendar.getInstance() 我该如何清洁它们? –
通过将MINUTES,SECONDS和MILLISECONDS字段设置为0来清除它们。 – Stephan