Date/Calendar gibt falschen Wochentag

  • Hallo zusammen,

    wieder ein Problem, das mich ratlos macht (hoffe es ist nur was einfaches :D )
    Folgender Code schmeißt mir für heute (Dienstag) ein Freitag raus:

    Java
    Date d = new Date(2012,2,21);
    			Calendar c = Calendar.getInstance();
    			c.setTime(d);
    			
    			String[] week = {"So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"};
    			
    			Log.d("Wochentag", week[c.get(Calendar.DAY_OF_WEEK)]);

    Sowohl im Android SDK Emulator, als auch auf meinem HTC.

  • Die Date-Objekte (und auch Calendar) rechnen intern mit long millisecondsSince1970 und die Jahreszahl wird beim Erzeugen auf den Startpunkt 1900 addiert.

    Das rechnet Linux schon so und das hat Java (und viele anderen Programmiersprachen, aber nicht alle) auch so übernommen.

    Dieses führt auch zu den Funktions-Paaren getYear / getFullYear usw. - einmal auf 1900 bezogen und einmal auf das gewohnte Kalenderjahr.

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

  • Java
    Date d = new Date(2012-1900, 2, 23);
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    
    
    String[] week = { "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"};
    Log.d("Wochentag", week[c.get(Calendar.DAY_OF_WEEK)]);

    sagt mir für heute Samstag :-/

  • OH - Feler Nummer 2 hab ich ja noch gar nicht gesehen...

    Probiere mal

    Java
    new Date(2012-1900, 2-1, 23);

    Wir wollen ja das Datum im Februar und nicht im März - die Zählung der Monate beginnt bei 0 für Januar!!!

    Sei froh, dass wir ein Schaltjahr haben, sonst wäre uns das Problem erst nächsten Monat aufgefallen!!!

    Bei Tagesangaben geht's dagegen bei 1 los.

    Und bei Jahren mit 1900 - nun haben wir es fast...

    Es kann auch noch Probleme geben, wenn man Stunden in am/pm eingeben kann, und wenn man 3 Tage addiert, sollte man lieber 3*24*60*60*1000 milliseconds addieren...

    Datumsangaben sind schon eine kleine Wissenschaft für sich...

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

  • Ah wie dämlich :D
    Immerhin zeigt er jetzt Freitag an, das kommt Donnerstag schon etwas näher.
    Vermutlich muss ich jetzt noch week[c.get(Calendar.DAY_OF_WEEK) - 1] schreiben...

  • Es ist leider wirklich nicht einfach mit Calendar...

    Wenn du DAY_OF_WEEK benutzt, dann ist SUNDAY die 1, MONDAY die 2 etc... Du bist also mit der -1 richtig in der Umrechung auf den Array-Index.

    Wahre Mathematiker rechnen übrigens dann (DAY_OF_WEEK - SUNDAY) und sind damit auf der sicheren Seite... 8)

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!