java、前端时间转换出现30分钟误差——新加坡时区历史原因

问题描述

本地时区是新加坡时区时,将小型long值,使用Java里date包转换或者前端js组件包转换时会有30分钟的误差

@Test
public void 测试耗时这种小型long值在新加坡时区下的问题() throws InterruptedException {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date startTime = new Date();
    System.out.println("startTime: " + formatter.format(startTime));
    System.out.println("startTime long: " + startTime.getTime());
    Thread.sleep(1000);
    Date endTime = new Date();
    System.out.println("endTime: " + formatter.format(endTime));
    System.out.println("endTime long: " + endTime.getTime());
    System.out.println("endTime long转换成Date,和真实时间一致: " + formatter.format(new Date(endTime.getTime())));
    long littleTimeLong = endTime.getTime() - startTime.getTime();
    Date littleTime = new Date(littleTimeLong);
    System.out.println("littleTimeLong: " + littleTimeLong);
    System.out.println("littleTimeLong 转换成Date,新加坡时区(UTC+08:00)下和真实时间不一致,littleTime: " + formatter.format(littleTime));
}

北京时区(UTC+08:00)测试结果:

startTime: 2022-07-01 16:37:33
startTime long: 1656664653939
endTime: 2022-07-01 16:37:34
endTime long: 1656664654940
endTime long转换成Date,和真实时间一致: 2022-07-01 16:37:34
littleTimeLong: 1001
littleTimeLong 转换成Date,新加坡时区(UTC+08:00)下和真实时间不一致,littleTime: 1970-01-01 08:00:01

新加坡时区(UTC+08:00)测试结果,应该是和北京时区一样才对:

startTime: 2022-07-01 16:38:14
startTime long: 1656664694903
endTime: 2022-07-01 16:38:15
endTime long: 1656664695904
endTime long转换成Date,和真实时间一致: 2022-07-01 16:38:15
littleTimeLong: 1001
littleTimeLong 转换成Date,新加坡时区(UTC+08:00)下和真实时间不一致,littleTime: 1970-01-01 07:30:01

原因分析:

新加坡时区历史原因

ps:demo里面的那个littleTime分界点,在这个历史原因里面应该也能找到答案,感兴趣同学可以深究下

解决方案:

耗时本来也没必要和时区扯上关系,自行根据时分秒换算规则转换就行。前端使用tools之类的组件,后端使用Date等包,都会获取当前时区做转换。实现时要注意。
可以参考:java把秒转换成时分秒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值