spring.jackson.date-format为给定的输入添加额外的4小时

时间:2017-08-22 12:12:50

标签: datetime spring-boot oracle11g

我想格式化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

提前致谢

1 个答案:

答案 0 :(得分:1)

这不是日期格式错误,这很可能与TimeZone有关。根据数据库和应用程序服务器的配置方式,它们似乎使用不同的默认时区。

您是否尝试过将数据库中的数据读回Java?如果数据库正确存储时区,那么当您将其读回java对象时,它应该正常工作。如果没有,我建议您先更新日期/时间格式以包含时区,例如spring.jackson.date-format=yyyy-MM-dd HH:mm:ssZ。然后数据库应该至少可以访问适当的时区。

如果这样做不起作用,适当的缓解措施实际上取决于您的应用以及如何利用时间/时区。可能你拥有的实际上很好,只是当你手动检查数据库时,它会向你显示默认时区的时间。您也可以将数据库和应用服务器设置为使用相同的时区,但这可能是配置的噩梦。

附注:作为一些一般性建议,如果可能的话,我强烈建议使用java.time.*jodatime库而不是java.util.Date。这与此特定问题无关,但它们比遗留java.util.Date

更强大的日期/时间库