fix: 修复UTC时间转为当地时间错误的问题

This commit is contained in:
曹鹏飞 2025-02-13 18:36:52 +08:00
parent 6d643be074
commit 462b9a1b87
2 changed files with 24 additions and 3 deletions

View File

@ -0,0 +1,19 @@
import org.junit.jupiter.api.Test;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public class LocalDateTimeTest {
@Test
public void test() {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
ZonedDateTime utcZoned = now.atZone(ZoneOffset.UTC);
ZonedDateTime shanghaiZoned = utcZoned.withZoneSameInstant(ZoneId.of("Asia/Shanghai"));
LocalDateTime shanghaiDateTime = shanghaiZoned.toLocalDateTime();
System.out.println(shanghaiDateTime);
}
}

View File

@ -11,6 +11,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.Objects;
/**
@ -24,7 +25,7 @@ public class UTCLocalDateTimeTypeHandler extends BaseTypeHandler<LocalDateTime>
public void setNonNullParameter(PreparedStatement ps, int i, LocalDateTime parameter, JdbcType jdbcType) throws SQLException {
// 将本地时间转换为 UTC 时间
LocalDateTime utcTime = parameter.atZone(ZoneId.systemDefault())
.withZoneSameInstant(ZoneId.of("UTC"))
.withZoneSameInstant(ZoneOffset.UTC)
.toLocalDateTime();
ps.setObject(i, utcTime);
}
@ -55,8 +56,9 @@ public class UTCLocalDateTimeTypeHandler extends BaseTypeHandler<LocalDateTime>
return null;
}
String zone = MultilingualUtil.getZone();
return utcTime.atZone(ZoneId.of(Objects.isNull(zone) ? "Asia/Shanghai" : zone))
.withZoneSameInstant(ZoneId.systemDefault())
return utcTime
.atZone(ZoneOffset.UTC)
.withZoneSameInstant(ZoneId.of(Objects.isNull(zone) ? "Asia/Shanghai" : zone))
.toLocalDateTime();
}
}