GregorianCalendar zeigt falschen Wochentag
Dominik
- java
1 Jens Holzkämper0 MudGuard
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
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
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
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
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
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