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.

  • 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...

  • 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)

Jetzt mitmachen!

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