2017-12-22 4 views
0

Ich setze ein Kalenderdatum für einen Alarm zu gehen. Alarmzeit hat die Stunde, Minute, Format und Tag eingestellt. Ich möchte auch jetzt die Zeit ergreifen und den Unterschied vergleichen. Also, wenn die Alarmzeit am Mittwoch eingestellt ist und jetzt die Zeit Donnerstag ist, möchte ich, wie viele Tage zwischen Donnerstag und Mittwoch. Ich brauche auch Stunden und Minuten.Erhalten Sie den Unterschied zwischen zwei Kalendern

Ich habe jedes Beispiel versucht und nichts scheint zu funktionieren.

Java-Methode

private void setAlarm(final int position, int day){ 

    alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE); 
    int amPm = 0 ; 

    String hourOfDay = mDataset.get(position).getHourOfDay(); 
    String minute = mDataset.get(position).getMinute(); 

    String format = mDataset.get(position).getTimeSet(); 
    if("PM".equalsIgnoreCase(format)){ 
     amPm = 1; 
    }else{ 
     amPm = 0; 
    } 

    Calendar alarmTime = Calendar.getInstance(); 
    alarmTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hourOfDay)); 
    alarmTime.set(Calendar.MINUTE, Integer.parseInt(minute)); 
    alarmTime.set(Calendar.AM_PM,amPm); 
    alarmTime.set(Calendar.DAY_OF_WEEK, day); 


    Calendar now = Calendar.getInstance(); 

Ich habe versucht, dies zu versuchen.

alarmTime = Calendar.getInstance(); 
    alarmTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hourOfDay)); 
    alarmTime.set(Calendar.MINUTE, Integer.parseInt(minute)); 
    alarmTime.set(Calendar.AM_PM,amPm); 
    alarmTime.set(Calendar.DAY_OF_WEEK, day); 


    Calendar now = Calendar.getInstance(); 


    long millis1 = now.getTimeInMillis(); 
    long millis2 = alarmTime.getTimeInMillis(); 

    long diff = millis1 - millis2; 

    long diffSeconds = diff/1000 % 60; 
    long diffMinutes = diff/(60 * 1000) % 60; 
    long diffHours = diff/(60 * 60 * 1000) % 24; 
    long diffDays = diff/(24 * 60 * 60 * 1000); 

Es ist einfach nicht ganz richtig. Es sagt 2 Tage, also gehe ich davon aus, dass es den Alarmtag (Dienstag) bis Donnerstag (heute) dauert. Was ich brauche ist von Heute (Donnerstag) bis Dienstag. Das ist ungefähr 5 Tage von jetzt an. Die Stunden sollte etwa 5 Stunden, aber immer scheinen 12.

enter image description here

Wie kann ich den Unterschied von der aktuellen Zeit, um die Alarmzeit bekommen, dass ich Einstellung bin.?

+0

Mögliches Duplikat von [Java-Kalender: Differenz zwischen zwei Daten/Zeiten erhalten - Aus mit Eins] (https://stackoverflow.com/questions/13198609/java-calendar-getting-difference-between-two-dates-times -off-by-one) – vinS

+0

versuche 'millis2 - millis1' anstelle von' millis1 - millis2' –

+0

habe ich das versucht und ich bekomme negative Zahlen und es ist immer noch nicht richtig – piddler

Antwort

1

paar Dinge, die ich sehe, ‚könnte‘ sein das Problem mit Ihrem Code sind:

alarmTime.set(Calendar.DAY_OF_WEEK, day); 

Sind Sie den Tag der Woche immer aus dem Datensatz oder Tag des Monats? Stellen Sie sicher, dass der Wochentag zurückgegeben oder in DAY_OF_MONTH geändert wird.

Sobald Sie das tun, können Sie so etwas wie dieses

long millis1 = now.getTimeInMillis(); 
long millis2 = alarmTime.getTimeInMillis(); 

//Take the absolute difference between the two millis so you don't get a negative valure 
long diff = millis1 > millis2 ? (millis1 - millis2) :(millis2 - millis1); 
int days = TimeUnit.MILLISECONDS.toDays(diff) 
int hours = TimeUnit.MILLISECONDS.toHours(diff) 
int minutes = TimeUnit.MILLISECONDS.toMinutes(diff) 

übertragen Sie den Unterschied zwischen zwei beliebigen Zeiten in Millis geben.

+0

Wie Sie auf dem Screenshot Tag = 3 für Dienstag – piddler

+0

sehen können, gebe ich Tag als eine ganze Zahl. Sonntag = 1 Montag = 2, Dienstag = 3 ect – piddler

+0

okay das ist eine bessere Erklärung coz Tag = 3 könnte auch 3. Tag des Monats bedeuten :). Aber versuchen Sie den Rest der Lösung, um den Unterschied zu erkennen und lassen Sie uns wissen, ob das Ihren Anforderungen entspricht. – LeoNeo

Verwandte Themen