gpt4 book ai didi

java - Spring 的@DateTimeFormat 生成一个包含前一天的 Date 对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:04 26 4
gpt4 key购买 nike

我有一个包含日期的 requestParam(即 2017-01-24T06:00:00.000Z)。

我正在使用 DateTimeFormat 将其格式化为日期以传递到我的 Controller 中。

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date myDate 

但是当我将 myDate 打印到我的控制台时,我得到“Mon Jan 23, 18:00:00 CST 2017”,但在我上面的示例中它应该是 1 月 24 日。为什么它会将我的日期改回 1 天?

最佳答案

这里有几件事在起作用。

首先,Spring的@DateTimeFormat ,在注释 java.util.Date 字段或参数时,uses a SimpleDateFormat with its timezone set to UTC .

其次,您使用了 DateTimeFormat.ISO.DATE代表

The most common ISO Date Format yyyy-MM-dd, e.g. "2000-10-31".

换句话说,它不会考虑您的日期字符串中的任何时区信息(这并不重要,因为您的日期字符串无论如何都 Root 于祖鲁语)。

第三,您提供了一个日期字符串,其中除了 iso 模式之外的所有内容都将被忽略。 SimpleDateFormat 只关心 2017-01-24 部分。

由于时区设置为 UTC,它认为 2017-01-24 日期以 UTC 为根,在午夜,零小时,分钟,和秒。

最后,由于您系统的默认时区是中央标准时间,即。 UTC-6),当你调用toStringDate 对象上,它将返回一个用该时区格式化的 String,即。午夜前 6 小时。


还请记住,Date 没有时区的概念。它是一个时间戳。


要“解决”这个问题,请构建您的 @DateTimeFormat使用适当的 pattern 来解释时间和时区。我会用

@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX") Date myDate 

关于java - Spring 的@DateTimeFormat 生成一个包含前一天的 Date 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41901675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com