new Date().toInstant()打印时间出错和实际时间相差8小时
错误记录,在使用这个方法打印时间时,出现相差8小时的情况
@Component
public class OrderStatisticsTask {
//注解:@Scheduled + cron 表达式
//cron表达式设置执行规则
//测试定时任务
//每隔5s,方法执行一次
@Scheduled(cron = "0/5 * * * * ?")
public void test(){
// 设置时区为 "Asia/Shanghai"
ZoneId zone = ZoneId.of("Asia/Shanghai");
// 获取当前时间并应用时区
ZonedDateTime now = ZonedDateTime.now(zone);
System.out.println(now);
System.out.println(new Date().toInstant());
}
}
控制台输出如下
2024-03-07 11:52:06 [INFO ] com.zmq.spzx.manager.ManagerApplication Started ManagerApplication in 2.788 seconds (process running for 3.26)
2024-03-07T11:52:10.009746+08:00[Asia/Shanghai]
2024-03-07T03:52:10.009Z
new Date().toInstant()打印的时间始终不正确,经过排查,错误原因为:
Instant
类在 Java 中表示的是距离 Unix 元年(1970-01-01T00:00:00Z)的时间间隔。Instant
对象是不包含时区信息的,它总是以 UTC(协调世界时)时区表示的时间点。因此,当你调用 new Date().toInstant()
方法时,会将 Date
对象转换为 UTC 时区的时间点,这可能导致时间相差8个小时的情况(比如与中国的时区 UTC+8 相差)。
不要使用这个方法,否则会导致时间出错。