所以我使用代码来解析字符串到目前为止,但这样做的方式错误,所以它以错误的格式记录在我的mysql数据库中。
如下: 代码:
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
System.out.println(new java.sql.Date(dateFormat.parse("2017-10-20").getTime()));
输出
0026-04-09
我想知道如何扭转这种情况,以便在字母0026-04-09中获得2017-10-20
答案 0 :(得分:1)
我认为最安全和最不复杂的方法是对可能在您的数据库中的所有日期再次进行错误的计算。然后你知道他们的收益,你将能够回到日期应该是什么。使用地图从错误的日期(console.log('Body: ', processedData)
或Date
)映射到应该的日期。
我正在使用
String
我还使用import java.sql.Date;
中的LocalDate
和Month
- 这些需要Java 8.如果您使用的是Java 7,则可以使用java.time
。代码示例 - 根据您的需求量身定制:
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));
行被打印,因此在2010年到2020年的间隔内,我们可以明确地转换回来。一种解脱,不是吗?
现在您已经构建了地图,查找很简单,例如:
Duplicate wrong date
打印所需的:
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
。
如果你有一个现代的JDBC驱动程序,你也应该能够避免上述代码中的null
并使用现代java.sql.Date
和朋友。