2016-06-18 5 views
0

Datum Zeit im Kalender ist ‚2016.06.18 13.54.00‘ und die aktuelle Datum Zeit ist ‚2016.06.18 14.45: 00 'dh 2016-6-18 2:45 PM. Im Kalender habe ich den Wert MONTH auf 5 gesetzt, da der Monat dort nullbasiert ist. Dies ist in Android:Android - warum aktuelle Zeit ist weniger als eine Rück Datum Zeit im Kalender

 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(); 
      } 

Aber das Ergebnis zeigt, der Toast „Alarm gesetzt“, während ich das sonst heißt erwartet „Alarm nicht gesetzt“.

Was ist hier los?

EDIT: Zu meiner Überraschung zeigt der Emulator Genymotion "Alarm ist eingestellt", während das reale Gerät zeigt "Alarm ist nicht eingestellt". Warum ist dieser Unterschied?

+0

Code ist perfekt, und es funktioniert perfekt in meiner lokalen Umgebung. Bitte kompilieren und erneut ausführen. –

+0

@ClementAmarnath, finden Sie "Alarm nicht gesetzt", wirklich? –

+0

@ClementAmarnath, bearbeitetes OP. –

Antwort

0

Verwenden Calendar.getIstance(). GetTimeInMillis()

mit der ersten Kalenderzeit zu vergleichen. Schauen Sie sich diese Antwort: https://stackoverflow.com/a/16516978

im Allgemeinen ist eine gute Praxis Daten oder Datum erzeugt von der gleichen Klasse vergleichen.

+0

habe ich das nicht gemacht? –

+0

Nein, hast du nicht. Sie verwenden System.currentTimeMillis() anstelle von calendar.getIstance(). GetTimeInMillisec() –

+0

Wo ist 'getTimeInMillisec' in developer.android.com dokumentiert? –

0

Klingt wie eine Zeitzone Problem.

Beachten Sie, dass Calendar.getInstance() ein Calendar Objekt erstellt, das die Standardzeitzone verwendet (d. H. Die Zeitzone, die in den Geräteeinstellungen konfiguriert ist).

Also, wenn Ihr Genymotion Emulator UTC die erstellt Calendar Objekt gesetzt ist, stellt 2016-06-18 13:54:00 UTC die 2016-06-18 14:54:00 GMT+1

Wenn Ihr Gerät in GTM + 1 ist, das erstellt Calendar Objekt repräsentiert 2016-06-18 13:54:00 GMT+1.

Um dies zu beheben Sie Calendar.getInstance(ZimeTone) die richtige Zeitzone vorbei stellen Sie sicher, rufen Sie die mit Ihrem Alarm verknüpft ist.

Verwandte Themen