Java SimpleDateFormat设置时区导致时间不正确的解决方案

问题介绍

在Android开发中经常遇到有的接口需要上传当前时间,如果后台要求直接传一个long类型的时间戳还好,因为这个时间戳是跟时区无关的,如果后台接口要求传的是格式化的时间,若本地设备设置的时区与后台要就的时区不一致,就会导致上传的时间不准确。

不完善的写法

这种写法SimpleDateFormat默认用的是本地设备设置的时区,若本地时区与后台约定的不一致就会导致问题

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timestamp = dateFormat.format(new Date());
设置时区

以格式化东八区时间为例,设置时区有以下三种写法,格式化后的时间是一样的

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
System.out.println("方法一:" + dateFormat.format(new Date()));
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
System.out.println("方法二:" + dateFormat.format(new Date()));
dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
System.out.println("方法三:" + dateFormat.format(new Date()));
输出结果

I/System.out: 方法一:2023-03-11 23:16:21

I/System.out: 方法二:2023-03-11 23:16:21

I/System.out: 方法三:2023-03-11 23:16:21

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值