fix: 修复UTC时间转为当地时间错误的问题
This commit is contained in:
parent
6d643be074
commit
462b9a1b87
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -11,6 +11,7 @@ import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZoneOffset;
|
||||||
import java.util.Objects;
|
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 {
|
public void setNonNullParameter(PreparedStatement ps, int i, LocalDateTime parameter, JdbcType jdbcType) throws SQLException {
|
||||||
// 将本地时间转换为 UTC 时间
|
// 将本地时间转换为 UTC 时间
|
||||||
LocalDateTime utcTime = parameter.atZone(ZoneId.systemDefault())
|
LocalDateTime utcTime = parameter.atZone(ZoneId.systemDefault())
|
||||||
.withZoneSameInstant(ZoneId.of("UTC"))
|
.withZoneSameInstant(ZoneOffset.UTC)
|
||||||
.toLocalDateTime();
|
.toLocalDateTime();
|
||||||
ps.setObject(i, utcTime);
|
ps.setObject(i, utcTime);
|
||||||
}
|
}
|
||||||
|
|
@ -55,8 +56,9 @@ public class UTCLocalDateTimeTypeHandler extends BaseTypeHandler<LocalDateTime>
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
String zone = MultilingualUtil.getZone();
|
String zone = MultilingualUtil.getZone();
|
||||||
return utcTime.atZone(ZoneId.of(Objects.isNull(zone) ? "Asia/Shanghai" : zone))
|
return utcTime
|
||||||
.withZoneSameInstant(ZoneId.systemDefault())
|
.atZone(ZoneOffset.UTC)
|
||||||
|
.withZoneSameInstant(ZoneId.of(Objects.isNull(zone) ? "Asia/Shanghai" : zone))
|
||||||
.toLocalDateTime();
|
.toLocalDateTime();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue