1. 时区
在Java中,可以使用LocalDateTime
来表示不带时区的日期和时间。在MySQL中,可以使用DATETIME
或TIMESTAMP
数据类型来存储日期和时间。DATETIME
类型存储的是具体的日期和时间值,不受时区影响。TIMESTAMP
类型也存储日期和时间值,但会自动转换为UTC时区存储,并且在检索时会自动转换为当前时区(不建议使用TIMESTAMP
)。
1.1. Java处理
使用LocalDateTime
类型的字段存储时间,将时间以一定的格式存入数据库,读取时再将数据库中存储的UTC时间转为指定时区下的时间
// 假设有一个UTC时间,参数1是UTC日期时间,参数2是UTC偏移量
OffsetDateTime utcDateTime = OffsetDateTime.of(localDateTime,ZoneOffset.UTC);
// 将UTC时间转换为特定时区下的时间
ZoneId zoneId = ZoneId.of("Asia/Shanghai");
ZonedDateTime zonedDateTime = utcDateTime.atZoneSameInstant(zoneId);
// 结果
System.out.println("UTC时间: " + utcDateTime);
System.out.println("目标时区时间: " + zonedDateTime);
在Java中应该使用@JsonFormat
注解指定日期时间字段在 JSON 序列化和反序列化过程中的格式
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
1.2. MySQL处理
使用DATETIME
类型的字段存储时间