Unterschiede bei der Berechnung der Woche pro Jahr zwischen Java- und Multi-SQL-RDBMS

Ich muss einige Berichte erstellen und in Java und MySQL jede Woche eines Datums berechnen, aber sie haben unterschiedliche Algorithmen.

Beachten Sie zunächst, dass nach einigen Methoden an einigen Tagen am Ende eines Jahres die erste Woche des nächsten Jahres liegt. Beispiele: 2012-12-31 ist die Woche 1 des Jahres 2013 (Ich erinnere mich nicht an das genaue Jahr, aber es ist so). Ich muss also das richtige Wochenjahr für ein Datum berechnen

In JavaEs basiert auf 2 Kriterien, die vom Gebietsschema abhängen:

Der erste Wochentag (Sonntag oder Montag)

minimale Tage in der ersten Woche (1 oder 4)

Calendar cal = Calendar.getInstance();
int javaWeek = cal.get(Calendar.WEEK_OF_YEAR);
int weekYear = cal.getWeekYear();

In MySQLEs stützt sich auf 2 Kriterien abModus (0 bis 7):

Der erste Wochentag (Sonntag oder Montag) (dies ist auch in Java so)

Minimale Tage in der ersten Woche sind 4 oder die erste Woche enthält den ersten Wochentag

SELECT WEEK('2012-12-12', 1);
SELECT YEARWEEK('2012-12-12', 1);

Und in MySQL berechnen einige Modi die Woche mit seltsamen Ergebnissen, zum Beispiel: Ein Jahr hat Woche 0 mit nur 1 Tag, und andere Wochen haben volle 7 Tage (ich denke, Woche 1 ist wirklich die erste Woche, und Woche 0 ist eine Vorwoche oder so). Ich werde diesen Modus ignorieren

Das Szenario ist: Ich berechne die Woche einer Liste der Datumsbasis auf meinem Systemgebietsschema (Gebietsschema mit Einstellung:getFirstDayOfWeek()==SUNDAY undgetMinimalDaysInFirstWeek==1) in Java und ich möchte in MySQL mit dem gleichen Ergebnis rechnen

Aber ich versuche alle 8 Modi in MySQL, keiner passt zusammen. Ich scheitere, weil es in MySQL keinen Modus gibt, der die Basis der berechneten Woche für den minimalen Tag in der ersten Woche 1 ist (nur einige Modi mit 4), also manuellsetMinimalDaysInFirstWeek(4) und der Modus 6 in MySQL stimmt mit dem Ergebnis in Java überein

(Ich muss einen Test schreiben und das Ergebnis eines jeden Tages in 2 Jahren in Java und MySQL vergleichen.)

DamitMeine Lösung ist, ichmuss reparieren setMinimalDaysInFirstWeek(4), und wenngetFirstDayOfWeek() ist MONTAG, ich wähle Modus 3 in MySQL, wenngetFirstDayOfWeek() ist SONNTAG, ich wähle Modus 6 in MySQL. Ich denke, es ist nur eine vorübergehende Lösung und wirklich komisch.

Ein weiteres Problem ist, dass ich wirklich Angst habe, wenn mein System von MySQL auf ein anderes RDBMS wechselt, es eine andere Methode hat und ich nicht mit allen umgehen kann (Beispiele in Oracle haben keine WEEK-Funktion). Gibt es also eine Möglichkeit, die Woche so zu berechnen, dass viele RDBMS zufrieden sind?

Ich habe die Idee, dass calc week auf einer Plattform (Java oder MySQL) das Ergebnis dann an die andere weitergibt:

Wenn ich von Java zu MySQL übergebe, muss ich das Ergebnis an die Abfragezeichenfolge übergeben oder eine Tabelle erstellen, die mein Ergebnis enthält

Wenn ich von MySQL nach Java übergebe, muss ich eine Prozedur schreiben, um sie von Java aus aufzurufen, und das Problem "Den Weg finden, um die Woche zu berechnen, befriedigt viele RDBMS" lösen.

Aber ich muss eine Massennummer von Datum berechnen, keine davon befriedigt mich, hat jemand eine Idee, meine Probleme zu lösen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage