Java Versionsproblem? Bitte helfen!

  • Themenstarter Themenstarter altes-kind
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
A

altes-kind

Gast
Hallo Leute,

ich hab folgende Methode:
Code:
    /**
     * Das erste und letzte Datum einer Kalenderwoche bestimmen (mit Klasse
     * java.util.GregorianCalendar)
     */
    public boolean setFirstAndLastDateInWeek(int week, int year) {
        boolean result = true;
        
        GregorianCalendar gc1 = new GregorianCalendar();
        // Jahr und Kalenderwoche setzen
        gc1.set(gc1.YEAR, year);
        gc1.set(gc1.WEEK_OF_YEAR, week); 
        
        // Erstes Datum in dieser Kalenderwoche
        gc1.set(GregorianCalendar.DAY_OF_WEEK, 2); 
        String y1 = ""+gc1.get(gc1.YEAR);
        String m1 = ""+(gc1.get(gc1.MONTH));
        String d1 = ""+gc1.get(gc1.DATE);
        try {
            this.firstDateInWeek = "2000".substring(0, 4 - y1.length()) + y1 +
            "00".substring(0, 2 - m1.length()) + m1 +
            "00".substring(0, 2 - d1.length()) + d1;
        }
        catch (Exception e) {
            result = false;
            System.out.println("Class 'Datum' - Method 'setFirstAndLastDateInWeek()': "+e.toString());
        }
        
        // Zweites Datum in dieser Kalenderwoche
        gc1.set(GregorianCalendar.DAY_OF_WEEK, 8); 
        String y2 = ""+gc1.get(gc1.YEAR);
        String m2 = ""+(gc1.get(gc1.MONTH));
        String d2 = ""+gc1.get(gc1.DATE);
        try {
            this.lastDateInWeek = "2000".substring(0, 4 - y2.length()) + y2 +
            "00".substring(0, 2 - m2.length()) + m2 +
            "00".substring(0, 2 - d2.length()) + d2;
        }
        catch (Exception e) {
            result = false;
            System.out.println("Class 'Datum' - Method 'setFirstAndLastDateInWeek()': "+e.toString());
        }
        
        return result;
    }

Jetzt lasse ich diese Methode auf zwei Webservern laufen (jeweils mit den Parametern week=1 und year=2005)
Webserver JRUN4 - Java 1.4:
Code:
setFirstAndLastDateInWeek(1, 2005);

firstDateInWeek: 20050003
lastDateInWeek: 20050009
Hier funktioniert es also wunderbar!!

Webserver JRUN3.1 - Java 1.2 (ich weiß... ist uralt ;-) ):
Code:
setFirstAndLastDateInWeek(1, 2005);

firstDateInWeek: 20050325
lastDateInWeek: 20050401
Hier läuft es falsch! Komisch ist dabei, dass eine Parameteränderung der week-Variable auf das Ergebnis bei dem alten Webserver gar keinen Einfluss hat, die year-Variable wird aber berücksichtigt!

z.B.
Code:
setFirstAndLastDateInWeek(2, 2005);

firstDateInWeek: 20050325
lastDateInWeek: 20050401
Also genau das gleiche wie bei week=1!
Wenn ich aber year ändere...
Code:
setFirstAndLastDateInWeek(1, 2004);

firstDateInWeek: 20040319
lastDateInWeek: 20040325
... wird das berücksichtigt, aber das ist natürlich trotzdem nicht Kalenderwoche 1!

Was läuft das falsch??

Ich bin mit meinem Latein am Ende!!

Danke im Voraus!

altes-kind
 
Sind beide in gleicher Zeitzone?
Versuche den Calendar wie folgt zu instanzieren.
Code:
...
Calendar gc1 = Calendar.getInstance(Locale.GERMANY);
...
 
Danke für die Antwort! Hat aber leider nichts gebracht! Ich poste hier jetzt mal die Klasse Test (welche diese Methode enthält) und eine jsp-Datei, die diese Methode aufruft!

Klasse Test
Code:
import java.util.Calendar;
import java.util.Locale;

public class Test {
    
    private String firstDateInWeek;
    private String lastDateInWeek;
    private String debug;
    
    public Test() {
        firstDateInWeek = "";
        lastDateInWeek = "";
        debug = "";
    }

    /**
     * Das erste und letzte Datum einer Kalenderwoche bestimmen 
     */
    public boolean setFirstAndLastDateInWeek(int week, int year) {
        boolean result = true;
        
        Calendar cal = Calendar.getInstance(Locale.GERMANY);
        // Jahr und Kalenderwoche setzen
        cal.set(cal.YEAR, year);
        cal.set(cal.WEEK_OF_YEAR, week); 
        
        // Erstes Datum in dieser Kalenderwoche
        cal.set(cal.DAY_OF_WEEK, 2); 
        String y1 = ""+cal.get(cal.YEAR);
        String m1 = ""+cal.get(cal.MONTH);
        String d1 = ""+cal.get(cal.DATE);
        debug = "week: "+week+" // year: "+year+" --- "+y1+" - "+m1+" - "+d1;
        try {
            firstDateInWeek = "2000".substring(0, 4 - y1.length()) + y1 +
            "00".substring(0, 2 - m1.length()) + m1 +
            "00".substring(0, 2 - d1.length()) + d1;
        }
        catch (Exception e) {
            result = false;
            System.out.println("Class 'Datum' - Method 'setFirstAndLastDateInWeek()': "+e.toString());
        }
        
        // Zweites Datum in dieser Kalenderwoche
        cal.set(cal.DAY_OF_WEEK, 8); 
        String y2 = ""+cal.get(cal.YEAR);
        String m2 = ""+cal.get(cal.MONTH);
        String d2 = ""+cal.get(cal.DATE);
        try {
            lastDateInWeek = "2000".substring(0, 4 - y2.length()) + y2 +
            "00".substring(0, 2 - m2.length()) + m2 +
            "00".substring(0, 2 - d2.length()) + d2;
        }
        catch (Exception e) {
            result = false;
            System.out.println("Class 'Datum' - Method 'setFirstAndLastDateInWeek()': "+e.toString());
        }
        
        return result;
    }
    
    public String getFirstDateInWeek()  { return firstDateInWeek; }
    public String getLastDateInWeek()   { return lastDateInWeek;  }
    public String getDebug()            { return debug;           }
    
}

test.jsp
Code:
<html>
<head><title>JSP Page</title></head>
<body>
<%
// Klasseninstanzen
Test t = new Test();
// Variablen
int week = HTMLTool.getIntParameter(request, "Week", 0);
int year = HTMLTool.getIntParameter(request, "Year", 0);

if (t.setFirstAndLastDateInWeek(week, year) == true) {
    String firstDateInWeek = t.getFirstDateInWeek();
    String lastDateInWeek = t.getLastDateInWeek();
    String debug = t.getDebug();
    out.println("firstDateInWeek: "+firstDateInWeek+"
lastDateInWeek: "+lastDateInWeek);
    out.println("

");
    out.println("debug: "+debug);
}
%>
</body>
</html>

Diese test.jsp könnt ihr mit den Parametern Week und Year gerne auch online aufrufen (und an den Parametern ein bißchen rumspielen um zu sehen wie komisch sich die Sache verhält): http://www2.wm-energy.de/ebs/test.jsp?Week=1&Year=2005

Was läuft da falsch??

Danke nochmals im Voraus,

altes-kind
 
na, ja... ich nutze in der jetzigen Version ja nur noch Klasse Calendar (siehe oben). Oder wird trotzdem GregorianCalendar verwendet?

Wo finde ich denn eine Übersicht welche Bugs in welcher Calendar in welcher Version behoben wurden?

Oder stimmt am Ende doch irgendwas mit meiner Methode nicht?

Danke,

altes-kind
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben