android - 为什么当前时间少于日历中的返回日期时间

时间:2016-06-18 08:54:11

标签: java android android-calendar

日历中设定的日期时间为“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仿真器显示'闹钟已设置'而真实设备显示“闹钟未设置”。为什么会有这种差异?

2 个答案:

答案 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),并传递与您的闹钟相关联的正确时区。