Asia/Shanghai与GMT-8的区别
背景今天公司一个模块从服务器迁移到k8s,出现时间toString()以后输出结果和以前不一致的情况,原因是以前是CST时间,k8s上统一设置环境时区为GMT-8了本文会讲清楚中国使用时区的来龙去脉。下一篇文档,会讲java中,遇到改时区问题,如何解决。先了解冷知识知识很重要,理解了这些才是时区的关键。DST:Daylight Saving Time中文名叫“夏令时”,一般在天亮早的夏季人为将时间
背景
今天公司一个模块从服务器迁移到k8s,出现时间toString()以后输出结果和以前不一致的情况,原因是以前是CST时间,k8s上统一设置环境时区为GMT-8了
本文会讲清楚中国使用时区的来龙去脉。
下一篇文档,会讲java中,遇到改时区问题,如何解决。
先了解冷知识
知识很重要,理解了这些才是时区的关键。
DST:Daylight Saving Time中文名叫“夏令时”,一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。中国1986-1991年实行夏令时,1992年废除。
CST:China Standard Time(老外认为有其他含义,中国就这个缩写),中国标准时。
GMT:Greenwich Mean Time,格林威治标准时,地球每15°经度 被分为一个时区,共分为24个时区,相邻时区相差一小时;例: 中国北京位于东八区。
Asia/Shanghai与GMT-8的区别
开发和运维经常见到的Asia/Shanghai与GMT-8的是什么意思呢?
GMT-8是东八区,北京时间和东八区一致。
Asia/Shanghai是已地区命名的地区标准时,在中国叫CST。这个地区标准时会兼容历史各个时间节点。中国1986-1991年实行夏令时,夏天和冬天差1个小时,Asia/Shanghai会兼容这个时间段。
结论:1992年以后,在中国,GMT-8和Asia/Shanghai是一样的时间,1986-1991之间,夏天会有一小时时差。
举例
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
Date birthday = sdf.parse("1988-08-13 13:13:13");
System.out.println("birthday = " + birthday.toString());
System.out.println("birthday = " + birthday.getTime());
}
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
Date birthday = sdf.parse("1988-08-13 13:13:13");
System.out.println("birthday = " + birthday.toString());
System.out.println("birthday = " + birthday.getTime());
}
输出结果相差一小时。
birthday = Sat Aug 13 13:13:13 CDT 1988
birthday = 587448793000
birthday = Sat Aug 13 14:13:13 CDT 1988
birthday = 587452393000
如果年份改成2020年,时间就一样了。
更多推荐
所有评论(0)