#SimpleDateFormat制定时区的字符串与日期互相转换

907 阅读1分钟

SimpleDateFormat 有一个方法

setTimeZone(TimeZone timeZone)

可以用来设置时区,那么这个应该是怎么用的呢?

答:这个设置的是被转换的数据源的时区,转换的而成的目标数据一直用的是应用本地时区,如果没有设置,则默认数据源的时区跟应用本地时区一致,这样子的话,转换的时候不会进行时区偏移的转换,如果是不同时区,输出的目标数据会自动转成应用对应的本地时区的时间

案例:

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm");
String parseStr="2021-10-11 09:10";
//设置0时区
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.parse(parseStr));

输出结果:

image.png

原因是设置了SimpleDateFormat的时区为0时区,所以这个时间字符串被认为是0时区的时间,而我本地是东八区,那么SimpleDateFormat将字符串转成date的时候,date是东八区的时间,所以自动加上了8个小时的时间偏移。

同理:将date类型转换成string类型的数据也一样,setTimeZone本质是设置数据源的时区,要得到的转换数据则用的是应用本地时区,时区不相同时得到的结果会自动补上偏移量