我想格式化java.util.Date
。我正确地得到年月和日,但当我将数据插入数据库时,我又得到4个小时。例如,如果我插入2017-12-18 12:00
然后插行将于2017-12-18 16:00
我的控制器:
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String insertRequest(@RequestBody EmployeeRequest employeeRequest) {
System.out.println(employeeRequest.getDate());
requestService.insertRequest(employeeRequest);
return "inserted and sent mail";
}
我的模特:
@NotNull
private Date date;
我的application.properties
spring.jackson.date-format=yyyy-MM-dd HH:mm
提前致谢
答案 0 :(得分:1)
这不是日期格式错误,这很可能与TimeZone有关。根据数据库和应用程序服务器的配置方式,它们似乎使用不同的默认时区。
您是否尝试过将数据库中的数据读回Java?如果数据库正确存储时区,那么当您将其读回java对象时,它应该正常工作。如果没有,我建议您先更新日期/时间格式以包含时区,例如spring.jackson.date-format=yyyy-MM-dd HH:mm:ssZ
。然后数据库应该至少可以访问适当的时区。
如果这样做不起作用,适当的缓解措施实际上取决于您的应用以及如何利用时间/时区。可能你拥有的实际上很好,只是当你手动检查数据库时,它会向你显示默认时区的时间。您也可以将数据库和应用服务器设置为使用相同的时区,但这可能是配置的噩梦。
附注:作为一些一般性建议,如果可能的话,我强烈建议使用java.time.*
或jodatime
库而不是java.util.Date
。这与此特定问题无关,但它们比遗留java.util.Date