我注意到,在MySQL服务器时区设置为UTC时,我们遇到了OffsetTime和OffsetDateTime不一致的问题。
我已经通过一个包含OffsetTime字段和OffsetDateTime字段的实体演示了这一点。由于某种原因,OffsetTime被转换为具有+1小时以获得UTC时间,尽管数据库被设置为UTC。OffsetDateTime具有相同的时间,但也具有日期,返回正确的时间。
private OffsetTime offsetTime;
private OffsetDateTime offsetDateTime;
数据库显示具有以下值的字段:
实体从数据库返回时,返回的OffsetTime为10:00:00(不正确),但OffsetDateTime设置为“2022-12- 22 T09:00:00 Z”(正确),JSON返回示例如下:
这是怎么回事?
谢啦,谢啦
1条答案
按热度按时间6yt4nkrj1#
我不确定,但这看起来可能与数据库在存储和检索值时如何处理时区和偏移量有关。
您是否检查过是否将值存储在
TIMESTAMP
列中,MySQL是否将值从当前时区转换为UTC进行存储,然后在检索值时将其转换回当前时区?例如,如果MySQL服务器的时区设置为UTC,并且您存储的
OffsetTime
值的偏移量为+01:00,则MySQL会在将该值存储到数据库之前将其转换为UTC。当您检索该值时,它会被转换回服务器的时区UTC,因此偏移量将被删除,并且该值将返回为09:00:00。如果您存储的OffsetDateTime
值的偏移量相同,则该值将原样存储在数据库中,并且当您检索该值时,该值将以相同的偏移量返回。这是因为OffsetDateTime
同时包含日期和时间,并且偏移量是时间信息的一部分。这就解释了不一致的IMHO。