我有一个带有字段的实体
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"
该日期被撤销一天。为什么呢?
答案 0 :(得分:2)
这些都代表了时间轴上的相同点,同时也是同一时刻:
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.date
和java.sql
软件包只是以毫秒为单位的包装,表示为 Longs ,因此也需要时区。
检查您的时区并检查服务器的时区并确保它们匹配。如果由于任何原因无法更改它,则可以使用日期格式化程序在从数据库检索时解析特定时区的时间