Spring中的@DateTimeFormat会产生偏离一天的错误

我目前在域对象中使用@DateTimeFormat,如下所示:

@DateTimeFormat(pattern = "MM/dd/yyyy")

private Date startDate = new Date();

在Spring MVC Controller中,我使用jQuery UI

Date选择器发布了今天的日期:2011/10/19,并且确认使用Firebug将其作为HTTP Post参数发送,如下所示:

startDate=10%2F19%2F2011

不幸的是,一旦到达服务器上的Spring,它会将日期存储为2011年10月18日-一天之内就会出现错误。

我的代码中没有任何东西甚至可以远程触及日期-对此日期没有任何计算或任何操作。

关于@DateTimeFormat,我应该注意些什么?

Hibernate中的某些内容也可以负责更改日期吗?

我也在查看此应用程序的数据库。我要存储另一个日期,称为creationDate实际时间戳,与用户输入不同。在大多数情况下,日期是相同的,但是客户希望能够对日期进行不同的设置,这就是为什么startDate

Start Date              Creation Date (actual timestamp, not user input)

2011-04-17 19:00:00 2011-04-17 21:32:27

2011-04-18 19:00:00 2011-04-18 21:14:01

2011-04-20 19:00:00 2011-04-20 23:06:47

2011-04-26 19:00:00 2011-04-26 23:24:34

2011-04-28 19:00:00 2011-04-28 20:07:06

2011-05-01 19:00:00 2011-05-02 13:35:37

2011-06-21 19:00:00 2011-06-22 15:06:36

2011-07-28 19:00:00 2011-07-29 15:32:35

2011-09-03 19:00:00 2011-09-04 13:11:45

2011-10-11 19:00:00 2011-10-12 11:45:14

2011-10-11 19:00:00 2011-10-12 11:49:55

2011-10-18 19:00:00 2011-10-19 02:20:43

起初似乎是5月启动的一个错误,但后来我意识到,如果日期超过19:00:00,则日期是正确的;如果日期低于19:00:00,则该日期是不正确的。

我讨厌Java :(

当Spring创建给定的日期时,似乎会出现问题10/19/2011-它似乎会将用户输入转换为该日期并将其格式化为2011-10-18

19:00:00

什么是最简单的解决方案?

谢谢

回答:

在我看来,这 实际上 是时区问题。一个Date对象代表时间的 瞬间

-我怀疑如果您查看所获得的确切值(例如,在UTC中,为了使情况保持清楚),您会更好地了解正在发生的事情。很有可能您会在“

10/18/2011”看到的是在其他时区进行解释。

如果Spring支持转换成约达时间类型我建议使用代替-那么你可以使用LocalDate它真的

平均的日期,而不是的时间瞬间。

以上是 Spring中的@DateTimeFormat会产生偏离一天的错误 的全部内容, 来源链接: utcz.com/qa/428616.html

回到顶部