一、时间戳定义二、应用场景三、总结
一、时间戳定义1、UTC时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数 2、北京时间戳是指1970年01月01日08时00分00秒起至现在的总秒数 由此可知:北京时间 = UTC时间+8小时二、应用场景
| 1、1641537092表示的是UTC时间戳,格式化成年月日时分秒。 |
解释:如下代码,我认为无论是UTC时间戳还是北京时间戳 格式化成年月日,只需要下面代码就行了,实际是错误的。
Long unixtimestamp = 1641537092L;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = simpleDateFormat.format(new Date(unixtimestamp * 1000));
System.out.println(format1);//2022-01-07 14:31:32
正确写法:
Long unixtimestamp = 1641537092L;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String format1 = simpleDateFormat.format(new Date(unixtimestamp * 1000));
System.out.println(format1);//2022-01-07 06:31:32
| 2、1641537092表示的是UTC时间戳,格式化成北京时间并转成年月日的形式。下面两种方式均可实现: |
Long unixtimestamp = 1641537092L;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = simpleDateFormat.format(new Date(unixtimestamp * 1000));
System.out.println(format1);//2022-01-07 14:31:32
Long unixtimestamp = 1641537092L + 8*60*60;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String format1 = simpleDateFormat.format(new Date(unixtimestamp * 1000));
System.out.println(format1);//2022-01-07 14:31:32
三、总结
UTC时间戳转北京时间有两种方法
1、直接把UTC时间戳格式化成年月日,格式化时不设置时区,因为默认是北京时区。
2、把UTC时间戳加8小时后,格式化时区需要设置成UTC时区。
3、UTC时间 = 北京时间+8小时,转换的时候,一定要注意当前时区
注意:如果您理解不了这个概念,就按照我给的上面的例子,直接套用就行了,慢慢品!!!



