# Funktion zum Bestimmen des Datums vom letzten Sonntag im März



## M4st3rmind (27. März 2009)

Ich habe Folgendes Problem...
Ich habe eine Recht große Anwendung vor mir die sich über mehrere Systeme erstreckt.

Zur erklärung, das Problem liegt in der Umstellung der Zeit.
Es werden quasie anfragen für Termine gestellt und zurück bekomme ich 2-3 tzermine mit einem Mechaniker...

Das Problem ist, dass wenn ich einen request am 27.03 starte und einen Termin am 03.04. bekomme, dann wird die Zeitverchiebung dazwischen nicht beachtet.


Ich brauche daher eine Funktion, die mir die Daten vom letzten Sonntag im März und vom Letzten Sonntag im Oktober gibt, damit ich dann quasie die Zeitspanne überprüfen kann ob dazwischen eine Zeitverschiebung lag...



Kann mir vieleicht jemand einen tipp geben, welche Funktion ich da verwenden könnte


----------



## matdacat (27. März 2009)

Erstell Dir einen GregorianCalendar für den 31.3. und zähl einen Tag runter solange der aktuelle Tag kein Sonntag (get(DAY_OF_WEEK) != Calendar.SUNDAY) ist. Glaube nicht, dass es eine "schöne" Lösung dafür gibt.


----------



## M4st3rmind (27. März 2009)

```
public static boolean zeitVerschiebung(final int year,
                                                        final int month,
                                                        final int date) {
            final Calendar cal = new GregorianCalendar(Locale.GERMANY);
            cal.clear();
            cal.set(year, month, date);
            return zeitVerschiebung(cal);
        }
```


Das wäre noch ein ansatz, den ich so hatte, die frage ist, wie setz ich da jetz ne zeitspanne rein... ne schleife, die alle daten prüft?
Und wenn ja, was mach ich mit schaltjahren, ect.
Optimal wäre es, wenn ich dann noch rausbekomme, ob eine stunde + oder - , was ich halt mit dem monat regeln würde, also wenn märz dann eine std. vor und wenn oktober, dann eine stunde zurück...
aber da das ein großes Programm im ganzen ist, wolle ich mal fragen, ob ihr da nicht ne kleine schnucklige funktion habt, die recht wenig fehlerpotenzial hat...



MfG M4st3rmind


----------



## M4st3rmind (31. März 2009)

meine Lösung sieht wie folgt aus :


```
public int lastsunday (int jahr, int monat){							//Funktion liefert den letzten Sonntag im März
		monat = monat -1;
		int datumLastSunday = 31;
		
		
		Calendar c = new GregorianCalendar(jahr, monat ,31 );
		String akttag = c.getTime().toString();
		
		
		java.util.HashMap wochentag = new java.util.HashMap();
		wochentag.put("Mon", "1");
		wochentag.put("Tue", "2");
		wochentag.put("Wed", "3");
		wochentag.put("Thu", "4");
		wochentag.put("Fri", "5");
		wochentag.put("Sat", "6");
		wochentag.put("Sun", "7");
		
		int wochentagi = Integer.parseInt(wochentag.get(akttag.substring(0,3)).toString());
	
		switch (wochentagi){
			case 1: {datumLastSunday = datumLastSunday -1;
				return datumLastSunday;
			}
			case 2: {datumLastSunday = datumLastSunday -2;
			return datumLastSunday;
			}
			case 3: {datumLastSunday = datumLastSunday -3;
			return datumLastSunday;
			}
			case 4: {datumLastSunday = datumLastSunday -4;
			return datumLastSunday;
			}
			case 5: {datumLastSunday = datumLastSunday -5;
			return datumLastSunday;
			}
			case 6:{ datumLastSunday = datumLastSunday -6;
			return datumLastSunday;
			}
			case 7: {datumLastSunday = datumLastSunday ;
			return datumLastSunday;
			}
		}

		return datumLastSunday;

	}
```
Also quasie gucke ich, welcher Wochentag der 31. ist und zähle dann entsprechend zurück...


MfG


----------



## Anime-Otaku (31. März 2009)

Ich verstehe nicht richtig wo das Problem ist.

Werden die Zeitzonendaten etwa nicht mitgespeichert bei euch oder nicht richtig ausgegeben? Wenn nicht speichert die Zeitzonendaten auch mit ab und gibt diesen anschliesend richtig aus.

Nun einen Hack zu machen, damit man erkennt wann die Sommerzeitschaltpunkte sind ist eindeutig der falsche Weg.

In wie fern wird die Zeitzone zwischen dem Request Termin und dem Ziel Termin nicht beachtet?


----------



## M4st3rmind (31. März 2009)

Anime-Otaku hat gesagt.:


> Ich verstehe nicht richtig wo das Problem ist.
> 
> Werden die Zeitzonendaten etwa nicht mitgespeichert bei euch oder nicht richtig ausgegeben? Wenn nicht speichert die Zeitzonendaten auch mit ab und gibt diesen anschliesend richtig aus.
> 
> ...



Das problem liegt nicht an System, sondern an der Art, wie die Daten in unsere "Java-Welt" kommen. Im Prinzip gehen requests zwischen verschiedenen servern hin und her. Das Java Programm verarbeitet dann die Daten die durch ein Metadirectory gehen.

Es handelt sich dabei um Termindaten.

Wird z.B. am 26. ein Termin gebucht, der 10 Tage in der Zukunft liegt, so ist die Zeit dann nichtmehr Korrekt, wegen der Zeitverschiebung. und das soll diese Funktion einfach Korrigieren.

Das problem liegt eigendlich daran, dass die Systeme so unterschiedlich sind, es handelt sich um IBM , Windows und Linux Server und daher lieber eine kleine Korrrekturfunktion bauen, als alle Systeme anzufassen 

Mehr kann ich dir da leider nicht sagen, da es um Firmeninterne Dinge geht...


----------

