Dominik: GregorianCalendar zeigt falschen Wochentag

Hallo,

ich erzeuge mit folgendem Code ein GregorianCalendar-Objekt:

  
// get current year to determine the current century  
Calendar cal = Calendar.getInstance();  
cal.setTime(new Date());  
// create time  
time = new GregorianCalendar(  
        year < 100 ? cal.get(Calendar.YEAR) / 100 * 100 + year : year,  
	month, dayOfMonth, hourOfDay, minute);  
time.setTimeZone(TimeZone.getTimeZone("CET"));  
time.set(GregorianCalendar.AM_PM, hourOfDay < 12 ? GregorianCalendar.AM  
	: GregorianCalendar.PM);  

Die Variablen year, month, dayOfMonth, hourOfDay und minute sind Methodenparameter vom Typ int.

Lasse ich mir nun das Datum mit folgendem Code ausgeben, erscheint immer der falsche Wochentag:

  
int hour = gregCal.get(GregorianCalendar.HOUR);  
if (gregCal.get(GregorianCalendar.AM_PM) == GregorianCalendar.PM) {  
	hour += 12;  
}  
int minute = gregCal.get(GregorianCalendar.MINUTE);  
int day = gregCal.get(GregorianCalendar.DAY_OF_MONTH);  
int month = gregCal.get(GregorianCalendar.MONTH);  
int year = gregCal.get(GregorianCalendar.YEAR);  
fw.write((hour < 10 ? "0" + hour : hour)+ ":"  
	+ (minute < 10 ? "0" + minute : minute) + " "  
	+ gregCal.getDisplayName(GregorianCalendar.DAY_OF_WEEK,  
		GregorianCalendar.SHORT,new Locale("de", "DE")) + ", "  
	+ (day < 10 ? "0" + day : day) + "."  
	+ (month < 10 ? "0" + month : month) + "."  
	+ (year < 10 ? "0" + year : year));  

fw ist dabei eine FileWriter und gregCal ein GregorianCalendar. Das ausgegebene Datum hat dann die Form:
20:31 Mo, 08.10.2010
Der 8.10.2010 ist allerdings ein Freitag.

Wie kann ich diese falsche Anzeige beheben?

Viele Grüße
Dominik

  1. Tach,

    ich erzeuge mit folgendem Code ein GregorianCalendar-Objekt:

    ich würde dir zuallererst mal die Joda Bibliothek nahelegen, die Java-eigene Implementation läßt häufig sehr zu wünschen übrig.

    20:31 Mo, 08.10.2010
    Der 8.10.2010 ist allerdings ein Freitag.

    Der 8. November ist aber ein Montag, die Anzeige ist korrekt; du erwartest, dass man bei Monaten mit 1 zu zählen beginnt, Java sieht das anders.

    mfg
    Woodfighter

    1. Hi,

      ergänzend:

      du erwartest, dass man bei Monaten mit 1 zu zählen beginnt, Java sieht das anders.

      So ziemlich jede verfügbare Datumsimplementierung so ziemlich jeder Sprache und Technik sieht das anders.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Tach,

        du erwartest, dass man bei Monaten mit 1 zu zählen beginnt, Java sieht das anders.

        So ziemlich jede verfügbare Datumsimplementierung so ziemlich jeder Sprache und Technik sieht das anders.

        ja, aber ich finde das trotz allem ziemlich unintuitiv und da die Java-Implementation dann auch noch ziemlich wenig bietet/bot (Datumsdifferenzen, Zeiträume etc.) und es eine bessere gibt, die frei ist und dann auch gleich mit der "richtigen" Monatszählung arbeitet, würde ich diese immer empfehlen. Dann muß ich mir auch nicht merken, dass die Methode, um ein Date-Objekt aus einem Kalender zu holen, getTime() heißt oder dass ein Date-Objekt einen Zeitpunkt enthält.

          
        (new LocalDate(2010,10,10)).toString("dd.MMMM.yyyy",new Locale(Locale.Germany))  
        
        

        ist auch irgendwie einfacher als

          
        (new SimpleDateFormat("dd.MMMM.yyyy",new Locale(Locale.Germany))).format((new GregorianCalendar()).set(2010,9,10).getTime());  
        
        

        An irgendwelchen Schnittstellen muß man eh immer ein Date-Objekt übergeben, ob ich das nu aus 'nem Calendar oder aus einem DateTime rausholen muß ist dann auch egal.

        mfg
        Woodfighter

    2. Hallo Woodfighter,

      Der 8. November ist aber ein Montag, die Anzeige ist korrekt; du erwartest, dass man bei Monaten mit 1 zu zählen beginnt, Java sieht das anders.

      danke für die Hilfe. Das hatte ich in der API komplett übersehen. Jetzt stimmt es :-) .

      Viele Grüße
      Daniel

  2. Hi,

    Lasse ich mir nun das Datum mit folgendem Code ausgeben, erscheint immer der falsche Wochentag:

    Warum von Hand? Warum nicht mit
    java.text.SimpleDateFormat
    ?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.