Das folgende Beispiel zeigt, wie man den Wochentag eines bestimmten Datums unabhängig von der Zeitzone mit APEX berechnet.
Berechnung Weihnachtstag:
Date dChristmas = date.newInstance(date.today().year(), 12, 24);
Date dStart = date.newInstance(1900, 1, 7);
Integer iWeekDayChristmas = math.mod(dStart.daysBetween(dChristmas), 7);
Ergebnis: iWeekDayChristmas = 3 --> Weihnachtstag 24.12.2014 am Mittwoch
0 = Sonntag
1 = Montag
2 = Dienstag
3 = Mittwoch
4 = Donnerstag
5 = Freitag
6 = Samstag
Nur so nebenbei, Buß und Bettag kann dann basierend auf dem Konstrukt wie folgt berechnet werden:
Date dNew = dChristmas.addDays(-32-iWeekDayChristmas);
Ergebnis: dNew = Buß und Bettag am 19.11.2014
Berechnung Weihnachtstag:
Date dChristmas = date.newInstance(date.today().year(), 12, 24);
Date dStart = date.newInstance(1900, 1, 7);
Integer iWeekDayChristmas = math.mod(dStart.daysBetween(dChristmas), 7);
Ergebnis: iWeekDayChristmas = 3 --> Weihnachtstag 24.12.2014 am Mittwoch
0 = Sonntag
1 = Montag
2 = Dienstag
3 = Mittwoch
4 = Donnerstag
5 = Freitag
6 = Samstag
Nur so nebenbei, Buß und Bettag kann dann basierend auf dem Konstrukt wie folgt berechnet werden:
Date dNew = dChristmas.addDays(-32-iWeekDayChristmas);
Ergebnis: dNew = Buß und Bettag am 19.11.2014
Hi. Die buß- und Bettagberechnung kann so nicht klappen. 2014 sind es zwar exakt 32 Tage zwischen dem und Weihnachten, aber 2013 waren es z.B. 34 Tage: B&B ist immer mittwochs, der 24. kann wechseln.
AntwortenLöschenWenn du dir die folgende Zeile etwas genauer anschaust, wirst du feststellen, dass die Zahl 32 den Mindestabstand zwischen Buß und Bettag und Weihnachtstag darstellt. Zusätzlich wird auch noch Offset in Form von "iWeekDayChristmas" abgezogen.
AntwortenLöschenAlso die Berechnung ist richtig. Das kannst du auch ganz einfach und schnell über die Konsole prüfen.
Date dNew = dChristmas.addDays(-32-iWeekDayChristmas);