Ich denke, der sicherste und am wenigsten komplizierte Weg ist, die Wro zu tun erneut Berechnungen für alle Daten durchführen, die möglicherweise in Ihrer Datenbank vorhanden sind. Dann wissen Sie, was sie nachgeben, und Sie können zu dem Zeitpunkt zurückkehren, an dem das Datum hätte sein sollen. Verwenden Sie eine Karte, um vom falschen Datum (wie Date
oder als String
) auf die Karte zu mappen, die es hätte sein sollen.
ich
bin mit
import java.sql.Date;
ich auch bin mit LocalDate
und Month
von java.time
- diese benötigen Java 8. Wenn Sie Java 7 verwenden, Sie java.util.Calendar
stattdessen verwenden können. Code-Beispiel - auf auf Ihre Bedürfnisse zugeschnitten werden:
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Map<Date, Date> corrections = new HashMap<>(5500); // capacity for 11 years
LocalDate endDate = LocalDate.of(2020, Month.DECEMBER, 31);
LocalDate currentDate = LocalDate.of(2010, Month.JANUARY, 1);
do {
Date correctDate = Date.valueOf(currentDate);
String correctString = correctDate.toString();
Date wrongDate = new Date(dateFormat.parse(correctString).getTime());
if (corrections.containsKey(wrongDate)) {
System.out.println("Duplicate wrong date " + wrongDate);
}
corrections.put(wrongDate, correctDate);
currentDate = currentDate.plusDays(1);
} while (! currentDate.isAfter(endDate));
Mit dem gewählten Zeitraum, wird den obigen Code ausgeführt werden nicht Ursache der Duplicate wrong date
Zeile gedruckt werden, so dass innerhalb des Intervalls 2010-2020 wir zurück konvertieren eindeutig. Eine Erleichterung, nicht wahr?
Jetzt können Sie die Karte erstellt haben, ist die Suche einfach, zum Beispiel:
Date wrongDate = new Date(dateFormat.parse("2017-10-20").getTime()); // 0026-04-09
Date correctDate = corrections.get(wrongDate);
if (correctDate == null) {
System.out.println("Could not find correction for " + wrongDate);
} else {
System.out.println(correctDate);
}
Dies druckt die gewünschte:
2017-10-20
Sie wollen sicherstellen, dass Sie eine nicht bekommen null
bevor Sie den Wert zurück in Ihre Datenbank setzen.
Wenn Sie einen modernen JDBC-Treiber haben, sollten Sie auch in der Lage sein, java.sql.Date
im obigen Code zu vermeiden und die modernen LocalDate
und Freunde den ganzen Weg durch zu verwenden.
Warum wechseln Sie nicht einfach das Datumsformat um, yyyy-MM-dd'? –
versuchte es am Tag 0026-04-09, es gibt 0026-04-09 auch, das Problem ist, ich versuche umzukehren, was ich für die anderen Daten auch notierte – CriminalDuck
So haben Sie '0026-04-09' in Ihre Datenbank jetzt und möchte sie bis zum '2017-10-20' korrigieren? Wird das als String oder als Datum gespeichert? Ich bin mir nicht sicher, ob es einen kugelsicheren Weg gibt, aber mit einigen weiteren Informationen können wir es besser sagen. –