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