title image


Smiley Wann ist ein Zeitpunkt in Sommerzeit/Winterzeit MESZ/MEZ?
Hallo zusammen,



ich suche eine Funktion, die für einen Timestamp/Date herausfindet, ob ich mich in Sommer- oder Winterzeit befinde, also etwa istSommerzeit(new Date()) => true/false.



Eine Regel, wann genau umgestellt wird, gibt es hier.



Ich mir die Klasse TimeZone angeschaut, aber die hat mich nicht weitergebracht.



Sofern es eine solche Funktion noch nicht gibt, würde ich jetzt so vorgehen wie im Code unten.



Noch unschöner wird dabei die Methode setzeTagAufLetztenTagEinesMonats(), in der ich dann wahrscheinlich in einer Schleife abwärts vom höchsten Tag eines Monats solange suche, bis ich den gesuchten Wochentag gefunden habe.





public class SommerzeitErrechner {

public static void main(String[] args) {

Calendar cal = Calendar.getInstance();

System.out.println("Sommerzeit: " + istSommerzeit(cal.getTime()));



Calendar cal2 = new GregorianCalendar();

cal2.set(Calendar.MONTH, 11);

System.out.println("Sommerzeit: " + istSommerzeit(cal2.getTime()));

}







public static boolean istSommerzeit(Date zeitpunkt) {

Calendar calDesGeprueftenZeitpunktes = Calendar.getInstance();

calDesGeprueftenZeitpunktes.setTime(zeitpunkt);

int jahrDesGeprueftenZeitpunktes = calDesGeprueftenZeitpunktes.get(Calendar.YEAR);



Calendar calBeginnSommerzeit = new GregorianCalendar();

Calendar calEndeSommerzeit = new GregorianCalendar();

// Setze die Kalender auf das Jahr des Zeitpunktes

calBeginnSommerzeit.set(Calendar.YEAR, jahrDesGeprueftenZeitpunktes);

calEndeSommerzeit.set(Calendar.YEAR, jahrDesGeprueftenZeitpunktes);



// Setze die Monate der Kalender. März/Oktober konstant

calBeginnSommerzeit.set(Calendar.MONTH, Calendar.MARCH);

calEndeSommerzeit.set(Calendar.MONTH, Calendar.OCTOBER);



//Setze die Tage der Zeitumstellung. Die müssen errechnet werden...

setzeTagAufLetztenTagEinesMonats(calBeginnSommerzeit, Calendar.SUNDAY, Calendar.MARCH);

setzeTagAufLetztenTagEinesMonats(calEndeSommerzeit, Calendar.SUNDAY, Calendar.OCTOBER);



//Setze Uhrzeiten der Zeitumstellung

calBeginnSommerzeit.set(Calendar.HOUR_OF_DAY, 2);

calEndeSommerzeit.set(Calendar.HOUR_OF_DAY, 3);



boolean istSommerzeit = calDesGeprueftenZeitpunktes.after(calBeginnSommerzeit)

&& calDesGeprueftenZeitpunktes.before(calEndeSommerzeit);



return istSommerzeit;

}



/**

* Setzt den DAY_OF_MONTH eines Kalender-Objektes auf das Datum des letzten

* Tages im Monat calMonat, der der gleiche Wochentag wie

* calWochentag ist.

*

* @param cal Calendar-Objekt, dessen DAY_OF_MONTH gesetzt wird

* @param calWochentag Wochentag

* @param calMonat Monat

*/

public static void setzeTagAufLetztenTagEinesMonats(Calendar cal, int calWochentag, int calMonat){

//...

}



}



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: