Calender Milliseconds Differenzrechnung

  • Antworten:4
Wdmprojekt
  • Forum-Beiträge: 33

05.02.2011, 12:27:10 via Website

Hallo,

ich versuche gerade den Alarm in Android zu programmieren, allerdings bekmme ich
als Differenzwert (Alarm Datum - Heutiges Datum) einen sehr hohen negativen Wert.
Als Ergebnis erwarte ich für einen Tag Differenz exakt 86400000; Das Ergebnis ist aber zur Zeit: -63096192000000.

Kann mir das jemand hier im Forum erklären, warum das so ist?

1try {
2 // Get datetime event, Quellformat "0000-00-00" und "00:00"
3 String[] possibleterminationdatesplitted = possibleterminationdate.trim().split("-");
4 String[] possibleterminationtimesplitted = possibleterminationtime.trim().split(":");
5
6 // Format datetimes
7 Calendar eventdatetime = new GregorianCalendar(
8Integer.parseInt(possibleterminationdatesplitted[2]),
9Integer.parseInt(possibleterminationdatesplitted[1]),
10Integer.parseInt(possibleterminationdatesplitted[0]),
11Integer.parseInt(possibleterminationtimesplitted[0]),
12Integer.parseInt(possibleterminationtimesplitted[1]));
13
14mCalendar = Calendar.getInstance();
15
16mYear = mCalendar.get(Calendar.YEAR);
17 mMonth = mCalendar.get(Calendar.MONTH);
18 mDay = mCalendar.get(Calendar.DAY_OF_MONTH);
19 mHour = mCalendar.get(Calendar.HOUR_OF_DAY);
20 mMinute = mCalendar.get(Calendar.MINUTE);
21 Calendar now = new GregorianCalendar(mYear, mMonth, mDay, mHour, mMinute);
22
23 // 86400000 milliseconds = 1 day
24 // 30000 milliseconds = 30 seconds
25 long triggerAtTime = (eventdatetime.getTimeInMillis() - now.getTimeInMillis());
26
27 Log.d("TRIGGER DATE TIME", String.valueOf(triggerAtTime));
28
29 // Parameters setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
30 alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtTime, 10 * 1000, pendingIntent);
31
32 Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
33 } catch(NumberFormatException e) {
34 System.out.println("Could not parse " + e);
35 }

— geändert am 05.02.2011, 12:34:01

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

05.02.2011, 12:47:25 via Website

kA was da schiefläuft, aber wieso nutzt du nicht das SimpleDateFormat für das Parsen des Date Strings in ein Long und arbeitst damit ?

— geändert am 05.02.2011, 14:25:31

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Wdmprojekt
  • Forum-Beiträge: 33

05.02.2011, 13:53:32 via Website

Okay, danke :)

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

05.02.2011, 15:12:33 via Website

Also wenn ich mir die Reihenfolge der Parameter so angucke, die du aus dem gesplitteten String an den Calendar übergibst,
und dazu den Kommentar ganz am Anfang zum Format, dann müsste das Jahr der erste Eintrag im Array sein.
Du übergibst aber als Jahr den Index 2... also laut deinem eigenen KOmmentar den Tag.


Ansonsten ist SimpleDateFormat für solche Umwandlungen das Mittel der Wahl. Dann passiert sowas auch net :)

Und um dir da direkt mal nen beliebten Anfängerfehler vorwegzunehmen:
Im Pattern für DateFormat sind MM und mm zwei verschiedene Dinge ;-)

Und noch eine Sache, die man zum Calendar wissen sollte:
DIe Monatsrechnung beginnt mit 0, nicht mit 1 wie die anderen Werte.
Januar hat also den Index 0 ! Wäre noch ein weiteres Problem bei der obigen Vorgehensweise.

— geändert am 05.02.2011, 15:37:11

Antworten
Wdmprojekt
  • Forum-Beiträge: 33

05.02.2011, 23:14:15 via Website

@Rafael K.

Danke, die Informationen waren Gold wert bei der Programmierung!!! Haben eine schnelle Umsetzung gefördert.

Vielen Dank :)

Antworten