获取日期可以追溯到某一天

时间:2017-12-07 15:20:55

标签: java spring hibernate date spring-mvc

我有一个带有字段的实体

public class MovieReleaseDateEntity {
     @Basic
     @Column(name = "release_date")
     @Temporal(TemporalType.DATE)
     private Date date;
}

我将日期保存在数据库中

https://zapodaj.net/14dfcfb70926a.png.html

我从数据库下载后得到它

"date": "2017-12-06T23:00:00.000+0000"

该日期被撤销一天。为什么呢?

2 个答案:

答案 0 :(得分:2)

TL;博士

这些都代表了时间轴上的相同点,同时也是同一时刻:

  • 2017-12-06T23:00:00.000 + 0000
  • 2017-12-07T00:00:00.000 + 01:00
  • 2017-12-07T04:30:00.000 + 05:30

详细

Europe/Warsaw time zone目前比UTC提前一小时。

  

" 2017-12-06T23:00:00.000 + 0000"

您的字符串代表UTC时刻。请注意+0000,缩写为+00:00,表示从UTC开始零小时和零分钟的偏移量。所以它在UTC。

在波兰墙上的时钟镜头看到的同一时刻是下一个日期早晨00:00。那是波兰新一天的第一刻。

  

" 2017-12-07T00:00:00.000 + 01:00"

同一时刻是印度的一个挂钟,那时人们比UTC早五个半小时。

  

" 2017-12-07T04:30:00.000 + 05:30"

如果波兰的一名失眠症患者在北美西海岸称他们的朋友,他们可能会在早些时候下午3点的时候抓住他们的朋友。墙上的时钟比UTC晚8小时。

  

" 2017-12-06T15:00:00.000-08:00"

将输入字符串解析为OffsetDateTime对象。要在其他时区查看同一时刻,请添加ZoneId以获取ZonedDateTime。搜索Stack Overflow以获取详细信息,因为已经涵盖了很多次。

避免使用Date等有问题的旧日期时间类。仅使用他们的替代品,即现代业界领先的java.time类。

答案 1 :(得分:1)

它不会还原一天,它会在不同的时区检索日期,减去一小时,并显示为前一天(因此2017-12-07 00:00:00变为2017-12-06 23:00:00)。您可能正在使用的java.datejava.sql软件包只是以毫秒为单位的包装,表示为 Longs ,因此也需要时区。

检查您的时区并检查服务器的时区并确保它们匹配。如果由于任何原因无法更改它,则可以使用日期格式化程序在从数据库检索时解析特定时区的时间