日历中设定的日期时间为“2016-6-18 13:54:00”,当前日期时间为“2016-6-18 14:45:00”,即2016-6-18 2:45 PM。在日历中,我将MONTH
值设置为5,因为月份基于零。这是在android:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2016);
calendar.set(Calendar.MONTH, 5);
calendar.set(Calendar.DATE, 18);
calendar.set(Calendar.HOUR_OF_DAY,13);
calendar.set(Calendar.MINUTE,54);
calendar.set(Calendar.SECOND,0);
long alarmTime =calendar.getTimeInMillis();
alarmTime = TimeUnit.MILLISECONDS.toSeconds(alarmTime);
long timeMillis = System.currentTimeMillis();
long currentTimeSeconds =TimeUnit.MILLISECONDS.toSeconds(timeMillis);
if (alarmTime > currentTimeSeconds) {
Toast.makeText(context, "Alarm is set", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "Alarm is not set", Toast.LENGTH_SHORT).show();
}
但是结果显示吐司“闹钟已设定”,而我预计否则“闹钟未设定”。
这里发生了什么?
编辑:令我惊讶的是,Genymotion仿真器显示'闹钟已设置'而真实设备显示“闹钟未设置”。为什么会有这种差异?
答案 0 :(得分:0)
使用Calendar.getIstance()。getTimeInMillis()
与第一次日历时间进行比较。看看这个答案: https://stackoverflow.com/a/16516978
通常比较同一类生成的数据或 date 是一种很好的做法。
答案 1 :(得分:0)
听起来像是时区问题。
请注意Calendar.getInstance()
使用默认时区(即在设备设置中配置的时区)创建Calendar
对象。
因此,如果您的Genymotion模拟器设置为UTC,则创建的Calendar
对象代表2016-06-18 13:54:00 UTC
<{1}}
如果您的设备位于GTM + 1中,则创建的2016-06-18 14:54:00 GMT+1
对象代表Calendar
。
要解决此问题,请务必致电Calendar.getInstance(ZimeTone)
,并传递与您的闹钟相关联的正确时区。