我正在使用Spring Data JPA在MySQL表列中存储日期时间值。但是它的行为真的很奇怪。当我创建应该存储的实体时,我有用于创建日期和时间的LocalDateTime字段,该字段通过 LocalDateTime.now()设置。当我调试代码并看到正在运行的代码时,LocalDateTime字段会使用正确的日期和时间进行实例化。但是由于某种原因,当实体存储在MySQL数据库中时,时间会设置为过去两个小时。如果时间是下午4点,则在数据库表中会设置为下午2点。但是当我用我的jpa存储库再次读取数据库中的值时,它再次被提前2小时推送,尽管它被存储了一个小时的偏移。所以这有点像两个错误变成了一个正确……我猜?这怎么可能呢?这看起来很疯狂,只是……不合逻辑。如果重要的话,这是本地开发。
因为DB,我早就遇到了这个问题,所以最初,我试图减少时间和分钟,但是,它不起作用。所以我重新加载应用程序和数据库,然后它工作正常。你可以试试,也许对你有用
我认为这个问题与数据库有关,而不是与代码有关的问题。
我有一种不同的方法,这在我的系统中有效
Instant instant = Instant.now();
Timestamp timestamp = Timestamp.from(instant);
使用这个时间戳来设置日期和时间,并且还必须更改实体类属性
private Timestamp publishedAt;
我希望它会奏效!!
尝试使用这些注释
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "published_at")
private Date publishedAt;