java - Spring @DateTimeFormat 在将 @PathVariable 转换为 Date 时正在更改时区

标签 java spring rest spring-mvc datetime-format

当使用 @DateTimeFormat 获取日期作为 @PathVariable 时,我正在尝试使用 spring 的自动字符串到日期转换。自动转换完成,但由于某种原因,日期被转换为我过去的日期减去四小时(复活节夏令时,服务器和客户端都位于此处)。

例子:

URL: .../something/04-10-2016/somename 将生成值为 2016/10/03 20:00:00 的 someDate 对象(即前一天晚上 8 点,这比我通过的日期晚了 4 小时。)

如何避免这种自动时区转换。我不需要任何时区信息,而且这种转换违反了我的预期。

这是我的代码:

@RequestMapping(value = "/something/{someDate}/{name}", method = RequestMethod.GET, headers = "Accept=application/json")
@ResponseBody
public SomeObject getDetails(@PathVariable @DateTimeFormat(pattern = "dd-MM-yyyy") Date someDate,
    @PathVariable String name) {
    // date here comes as GMT - 4
    // more code here
    // return someObject;
}

现在,我正在通过将路径变量作为字符串读取并使用 SimpleDateFormatter 手动将字符串转换为日期来解决此问题。

关于如何在不进行时区转换的情况下进行自动转换,我有什么想法吗?

最佳答案

问题的原因可能是时区,java.util.Date 即时时间被转换回东部时区,因此您可以看到值。如果您使用的是 Java 8,LocalDate 应该可以为您解决问题。

@PathVariable @DateTimeFormat(pattern = "dd-MM-yyyy") LocalDate date

下面为大家整理一些选项

https://www.petrikainulainen.net/programming/spring-framework/spring-from-the-trenches-parsing-date-and-time-information-from-a-request-parameter/

关于java - Spring @DateTimeFormat 在将 @PathVariable 转换为 Date 时正在更改时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39855291/

相关文章:

java - org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'projectTaskRepository'

java - 无法格式化为 XMLGregorianCalendar

java - 访问rest-api方法getAll时获取数据失败

java - Android 401 使用 HttpURLConnection 连接到 REST 服务时出错

java - 更新响应对象而不转换为java对象

java - OSGi 服务的 ProgressMonitor

java - xjc的ObjectFactory的 "JAXBElemet<Xyz> createXyz(Xyz xyz)"这样的方法签名生成了什么xml模式上下文?

java - 集成测试 DAO INSERT 语句

java - android中的EBADF错误文件号错误

Spring应用程序上下文加载钩子(Hook)