2016-06-18 48 views
0

日曆中設置的日期時間是'2016-6-18 13:54:00',當前日期時間是'2016-6-18 14:45: 00'即2016-6-18 2:45 PM。在日曆中,我將MONTH值設置爲5,因爲月份基於零。這是在android: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模擬器顯示'Alarm is set',而真實設備顯示'Alarm set not set'。爲什麼這種差異?

+0

代碼是完美的,它完美地工作在我的本地環境中。請重新編譯並重新運行。 –

+0

@ClementAmarnath,你覺得'鬧鐘沒有設置',真的嗎? –

+0

@ClementAmarnath,編輯OP。 –

回答

0

使用Calendar.getIstance()。getTimeInMillis()

與第一時間日曆時間進行比較。看看這個答案: https://stackoverflow.com/a/16516978

一般是一個很好的做法比較數據或同一類生成日期

+0

我不是那樣做的嗎? –

+0

不,你沒有。您正在使用System.currentTimeMillis()而不是calendar.getIstance()。getTimeInMillisec() –

+0

developer.android.com中記錄了'getTimeInMillisec'的位置? –

0

聽起來像是一個時區問題。

請注意,Calendar.getInstance()使用默認時區(即在設備設置中配置的時區)創建Calendar對象。

因此,如果您Genymotion模擬器設置爲UTC創建Calendar對象表示2016-06-18 13:54:00 UTC這是2016-06-18 14:54:00 GMT+1

如果您的設備是GTM + 1,創建Calendar對象表示2016-06-18 13:54:00 GMT+1

要解決此問題,請確保您撥打Calendar.getInstance(ZimeTone)傳遞與鬧鐘關聯的正確時區。

相關問題