Nic*_*ack 6 java spring date spring-mvc
我有一个requestParam接受日期(即2017-01-24T06:00:00.000Z).
我正在使用DateTimeFormat将其格式化为传递到我的控制器的日期.
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date myDate
Run Code Online (Sandbox Code Playgroud)
但是当我将myDate打印到我的控制台时,我得到"2017年1月23日,18:00:00 CST 2017",但在上面的例子中,它应该是1月24日.为什么它改变我的约会1天?
这里有几件事情在玩.
首先,Spring @DateTimeFormat在注释java.util.Date字段或参数时使用SimpleDateFormat其时区设置为UTC.
其次,你用过DateTimeFormat.ISO.DATE哪个代表
最常见的ISO日期格式
yyyy-MM-dd,例如"2000-10-31".
换句话说,它不会考虑您的日期字符串中的任何时区信息(这并不重要,因为您的日期字符串无论如何都扎根于Zulu).
第三,你提供了一个日期字符串,除了iso模式之外的所有内容都会被忽略.该SimpleDateFormat只关心2017-01-24的部分.
由于时区设置为UTC,因此它将2017-01-24日期视为以UTC,午夜,零小时,分钟和秒为根.
最后,由于您系统的默认时区是中央标准时间,即.UTC-6),当你调用toString该Date对象时,它将返回一个String用该时区格式化的对象,即.午夜6点前.
还要记住,a Date没有时区概念.这是一个时间戳.
要"修复"这个,@DateTimeFormat用适当的方法构建你的pattern时间和时区.我会用
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX") Date myDate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6088 次 |
| 最近记录: |