搞砸我的日期格式与java
问题描述:
所以我使用的代码来解析字符串日期,但它做错了方式,所以它记录在我的mysql数据库中的格式错误。搞砸我的日期格式与java
像下面这样: 代码:
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
答
我认为最安全和最不复杂的方法是做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
和朋友。
+0
非常感谢!它对我有用 – CriminalDuck
为什么不改变日期格式为'yyyy-MM-dd'呢? –
在0026-04-09的日期试过了,它也给出了0026-04-09,问题在于我试图扭转我为其他日期记录的内容。 – CriminalDuck
因此,您有'0026-04-09'你的数据库现在并且想要修改回'2017-10-20'?是以字符串还是日期存储?我不确定是否有防弹的方式,但有更多的信息可以更好地说明。 –