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