java SimpleDateFormat设置时区格式化时区

前情提要

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

有问题的写法

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

1
2
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timestamp = dateFormat.format(new Date());

Click and drag to move

设置时区

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

1
2
3
4
5
6
7
8
9
10
11
public class Test5 {
public static void main(String[] args) {
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()));
}
}

Click and drag to move

输出结果

1
2
3
方法一:2019-05-18 17:02:17
方法二:2019-05-18 17:02:17
方法三:2019-05-18 17:02:17

Click and drag to move