时间的处理

Posted by Wh0ami-hy on January 12, 2024

1. 时区

在Java中,可以使用LocalDateTime来表示不带时区的日期和时间。在MySQL中,可以使用DATETIMETIMESTAMP数据类型来存储日期和时间。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类型的字段存储时间


本站总访问量