LastDayofMonth

Chriss_07

Aktives Mitglied
Ich hänge an einer Datumsfunktion, um mir den letzten Tag eines Monates zu berechnen.
Dazu hab ich folgendes aufgebaut
Java:
public boolean leapYear (String y) {
        	  y = comboYear.getText();
  // Returns true if y is a leap year
  // according to the Gregorian calendar

    // y must be a multiple of 4 and NOT a century
    // year or must be a century year divisible by 400
  
    return (((y % 4) == 0) && ((y % 100) != 0))
           || ((y % 400) == 0);
  }

        private int lastDayOfMonth( String mo , String yr ) {
        	mo = comboMonth.getText();
            int nDays;
            if ( mo == 4 || mo == 6 || mo == 9 || mo == 11 )
                nDays = 30;
            else if ( mo == 2) {
                if (leapYear( yr ) ) nDays = 29;
                else nDays = 28;
            } else {
                nDays = 31;
            }
            return nDays;
        }
Monat und Jahr kommen aus ComboBoxen, damit will ich den letzten Tag des Monates berechnen ( auch Schaltjahr), um diesen wieder in einem SQL String zur Abfrage von Datensätzen anzuwenden.
Kann wer sagen, was ich da falsch mache?
 

LoR

Bekanntes Mitglied
Warum selbst machen, wenn es das schon gibt?

z.B.
Java:
Calendar cal = GregorianCalendar.getInstance();
cal.set(2010, 1, 1, 0, 0, 0); //z.B. 01.02.2010 0Uhr
int maximum = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
System.out.println(maximum);
 

Chriss_07

Aktives Mitglied
Dann muss ich aber erst wieder StringToInt und IntToString machen, denn
Code:
cal.set
ist
Code:
int
und ich habe einen String
Code:
comboMonth.getText()
als Startparameter
 

Chriss_07

Aktives Mitglied
Java:
        public int lastDayOfMonth( String mo , String yr ) {
        	mo = comboMonth.getText();
        	yr = comboYear.getText();
        	int moInt = Integer.parseInt(mo);
        	int yrInt = Integer.parseInt(yr);
        
        Calendar cal = GregorianCalendar.getInstance();
        cal.set(yrInt, moInt, 1, 0, 0, 0); //z.B. 01.02.2010 0Uhr
        int maximum = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println(maximum);
        return maximum;
        }

Februar wird mit 31 Tagen ausgegeben, März mit 30. Da stimmt doch was nicht!
 

Hobbes

Aktives Mitglied
Code:
cal.set(yrInt, moInt, 1, 0, 0, 0); //z.B. 01.02.2010 0Uhr
Die Zählung der Monate beginnt mit "0".

0 = Januar
1 = Februar
2 = März
usw.
 

Chriss_07

Aktives Mitglied
Stimmt und meine Zählung beginnt mit 1, also
Code:
cal.set(yrInt, moInt-1, 1, 0, 0, 0);
so klappt es
 

LoR

Bekanntes Mitglied
Dann muss ich aber erst wieder StringToInt und IntToString machen, denn
Code:
cal.set
ist
Code:
int
und ich habe einen String
Code:
comboMonth.getText()
als Startparameter

Aus diesem Grund stopft man auch keinen "reinen" String in eine ComboBox. Es reicht die toString() - Methode in deinem gegebenen Objekt zu überschreiben.
 

Murray

Top Contributor
Kann wer sagen, was ich da falsch mache?
Der Compiler müsste Dir das eigentlich sagen.

Wenn Du schon mit Strings arbeiten willst, dann musst Du auch mit String-Literalen vergleichen ( also zb mo == "4" statt mo == 4). Und in isLeapYear rechenst Du ja mit dem Wert; insofern wird das so mit Strings nicht funktionieren.

Außerdem solltest Du Dich noch entscheiden, ob die Methoden den String selbst aus der Combobox abholen (dann sollte mo kein Parameter, sondern eine lokale Variable sein), oder ob der Wert übergeben werden soll (dann sollte das Abfragen der Combioxbox auch außerhalb der Methode passieren).

Generell würde ich aber doch stark dazu raten, die Daten in ints zu wandeln und mit Calendar zu arbeiten.
 

Murray

Top Contributor
Aus diesem Grund stopft man auch keinen "reinen" String in eine ComboBox. Es reicht die toString() - Methode in deinem gegebenen Objekt zu überschreiben.
Wie sollte das denn helfen? Auch eine überschriebene toString-Methode wird immer einen String liefern.

EDIT: OK, wenn man diese Aussage
Chriss_07 hat gesagt.:
und ich habe einen String comboMonth.getText() als Startparameter
nicht so erst nimmt ,sondern davon ausgeht, dass man - wie es der bisher gepostete Code ja auch impliziert - Zugriff auf das Combobox-Objekt hat, dann kann man sich natürlich das selektiert Objekt holen, welches - wenn man wirklich strukturierte Objekte in dei liste gepackt hat, neben der toString-Method auch Zugriff auf den Inetger-Wert bieten könnte
 
Zuletzt bearbeitet:

LoR

Bekanntes Mitglied
EDIT: OK, wenn man diese Aussage

nicht so erst nimmt ,sondern davon ausgeht, dass man - wie es der bisher gepostete Code ja auch impliziert - Zugriff auf das Combobox-Objekt hat, dann kann man sich natürlich das selektiert Objekt holen, welches - wenn man wirklich strukturierte Objekte in dei liste gepackt hat, neben der toString-Method auch Zugriff auf den Inetger-Wert bieten könnte

*Klick* :D.
 
G

Gast2

Gast
Aus diesem Grund stopft man auch keinen "reinen" String in eine ComboBox. Es reicht die toString() - Methode in deinem gegebenen Objekt zu überschreiben.

Du weißt doch gar net ob er Swing oder SWT verwendet.
Außerdem würde ichd ie toString methode bestimtm nciht wegen einer Combobox überschreiben.
 
G

Gast2

Gast
Da du in letzter Zeit immer SWT Sachen gepostest hast frag ich dich jetzt mal warum du comboboxen für eine Datumsauswahl verwendest??? Gibt doch bessere widget dafür
z.b. CDateTime,DateChooserCombo

Nebula Project
 

Chriss_07

Aktives Mitglied
Da du in letzter Zeit immer SWT Sachen gepostest hast frag ich dich jetzt mal warum du comboboxen für eine Datumsauswahl verwendest??? Gibt doch bessere widget dafür
z.b. CDateTime,DateChooserCombo

Nebula Project

Ja du hast recht, ich verwende SWT. Ich will nur den Monat und das Jahr als Auswahlkriterium, da fällt der DateChooser schon mal flach. CDateTime sagt mir nichts, daher habe ich zwei ComboBoxen genommen.
 
G

Gast2

Gast
Soviel ich weiß kannst du bei beiden sagen was man aussuchen soll... und den date string auswählen einfach mal testen...und wenn nicht dann bau aus deine string ein gescheites date objekt bzw. calendar und vergleiche damit...
 

Neue Themen


Oben