我的实体有一个java.sql.Timestamp
字段:
@Column(name = "expires_at")
private Timestamp expiresAt;
该表还有一个默认列updated_at
,该列在插入/更新时动态设置(即,它不是通过JPA设置的):
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
我以这种方式在持久化实体中设置了expiresAt
:
long currTimestamp = Instant.now().getEpochSecond();
LocalDateTime ldt = LocalDateTime.ofInstant(Instant.ofEpochSecond(currTimestamp), ZoneId.of("UTC"));
Timestamp expiresAt = Timestamp.valueOf(ldt);
myEntity.setExpiresAt(expiresAt);
我位于PDT时区.我在本地运行了Spring Boot应用程序,它使用我的Docker Desktop中的MySQL容器. 此查询显示UTC时间,这意味着MySQL容器的时区为UTC:
select now();
但是,当我将实体持久化到表中并执行select
时,包含expires_at
列的DateTime字符串显示PDT时间.updated_at
栏显示UTC时间.
有趣的是,从我的AWS ECS Spring Boot应用程序到AWS RDS MySQL实例的记录都显示为expires_at
和updated_at
的UTC.
当我将本地JDBC字符串(用于连接到Docker Desktop容器)更新为mysql://localhost:3306/mydbname?connectionTimeZone=UTC
时,两者都显示UTC.
有谁能解释一下为什么会发生这种情况?为什么在AWS RDS中,它们都以UTC显示,尽管我在那里没有使用connectionTimeZone
标志