Tobias: java.util.GregorianCalendar.MONTH liefert August ?!?

Hi!

Habe in meiner Applikation folgende Verwendung für einen Kalender:

private int getAktuellesMonat() {
  int monat = 0;
  java.util.Calendar rightNow = java.util.GregorianCalendar.getInstance();
  monat = rightNow.get(java.util.GregorianCalendar.MONTH);
  System.out.println(monat);return monat;
 }

Das Problem hierbei: das system.out produziert 8
Obwohl doch eigtl schon September ist ;-)

Das Windows-Datum hab ich mit Doppelklick rechts unten nachgeprüft - dort ist es September.
Gibt's noch eine andere interne Uhrzeit, wo sich java den aktuellen Monat usw. herholt? Oder steckt ein anderer Fehler dahinter? Wie kann man diese "interne Uhrzeit" umstellen? Tag, Jahr und Uhrzeit passt übrigens. Nur das verflixte eine Monat...?!

Thx & cu, Tobias

  1. Hallo Tobias,

    Monate werden mit Null beginnent nummeriert. Siehe auch http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html#MONTH

    Grüße

    Daniel

    1. Danke...
      war wohl ein Anfängerfehler meinerseits :-)

    2. sorry, gleich noch ein Problem:

      private String getAktuellenWochentag() {
        String wochentag = "";
        int tagnummer = 0;
        java.util.Calendar rightNow = java.util.GregorianCalendar.getInstance();
        System.out.println(rightNow);
        tagnummer = rightNow.get(java.util.GregorianCalendar.DAY_OF_WEEK);
        switch (tagnummer){
         case java.util.Calendar.MONDAY:    wochentag = "Mo";
         case java.util.Calendar.TUESDAY:   wochentag = "Di";
         case java.util.Calendar.WEDNESDAY: wochentag = "Mi";
         case java.util.Calendar.THURSDAY:  wochentag = "Do";
         case java.util.Calendar.FRIDAY:    wochentag = "Fr";
         case java.util.Calendar.SATURDAY:  wochentag = "Sa";
         case java.util.Calendar.SUNDAY:    wochentag = "So";
        }
        return wochentag;
       }

      Liefert mir für heute "So" ... das entspricht auch dem 15. vom August. Da steht aber in der API nix dabei dass da irgendwas "komisch" läuft...!

      Hab ich Tomaten auf den Augen? Sieht jemand meinen Fehler?

      Danke, Tobias

      1. Hallo Tobias,

        Bei einem switch-Statement wird zur entsprechenden case-Marke gesprungen und ab da aller Code ausgeführt.
        Wenn Du das nicht willst, musst Du den switch-Block mit break verlassen:

        switch (tagnummer){
           case java.util.Calendar.MONDAY:    wochentag = "Mo"; break;
           case java.util.Calendar.TUESDAY:   wochentag = "Di"; break;
           case java.util.Calendar.WEDNESDAY: wochentag = "Mi"; break;
           case java.util.Calendar.THURSDAY:  wochentag = "Do"; break;
           case java.util.Calendar.FRIDAY:    wochentag = "Fr"; break;
           case java.util.Calendar.SATURDAY:  wochentag = "Sa"; break;
           case java.util.Calendar.SUNDAY:    wochentag = "So";
          }

        Grüße

        Daniel

    3. Moin,

      Monate werden mit Null beginnent nummeriert. Siehe auch http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html#MONTH

      Und da weder Tag noch Jahr bei Null beginnend gezählt werden muß dieser Teil der API einfach unter dem Einfluß von wirklich schlechtem Gras entstanden sein, wenn ihr mich fragt.

      --
      Henryk Plötz
      Grüße von der Ostsee
      1. Hi,

        Monate werden mit Null beginnent nummeriert. Siehe auch http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html#MONTH
        Und da weder Tag noch Jahr bei Null beginnend gezählt werden muß dieser Teil der API einfach unter dem Einfluß von wirklich schlechtem Gras entstanden sein, wenn ihr mich fragt.

        Naja, Monat und Wochentag werden häufig als Indizes in Arrays mit den Namen benutzt ==> 0-basierte Zählung scheint effektiver.
        Für die Jahreszahl oder den Tag innerhalb des Monats wird jedoch die Zahl direkt verwendet.
        Ist auch bei anderen Sprachen so (Javascript z.B.)

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.Mud-Guard.de/
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.