我認爲最安全和最不復雜的方法是做wro對於可能存在於數據庫中的所有日期再次進行計算。然後你知道它們會產生什麼,你將能夠回到原來的日期。使用地圖將錯誤的日期(如Date
或String
)映射到應該出現的日期。
我使用
import java.sql.Date;
我也使用LocalDate
和Month
從java.time
- 這些需要Java 8.如果您使用的是Java 7,您可以使用java.util.Calendar
代替。代碼示例 - 進行調整以適應您的需求:
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));
有了選擇的日期,運行上面的代碼並不原因要打印的Duplicate wrong date
線,所以2010至20年的時間內,我們可以轉換回明確。解脫,不是嗎?
現在你已經建立了地圖,查找方便,例如:
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);
}
這將打印所需:
2017-10-20
你要確保你沒有得到一個在將數值放回數據庫之前,請使用null
。
如果你有一個現代的JDBC驅動程序,你應該也可以在上面的代碼中避免java.sql.Date
,並且使用現代的LocalDate
和朋友。
爲什麼不改變日期格式爲'yyyy-MM-dd'呢? –
在0026-04-09的日期試過了,它也給出了0026-04-09,問題在於我試圖扭轉我爲其他日期記錄的內容。 – CriminalDuck
因此,您有'0026-04-09'你的數據庫現在並且想要修改回'2017-10-20'?是以字符串還是日期存儲?我不確定是否有防彈的方式,但有更多的信息可以更好地說明。 –