生活工程体验信仰哲学精神
投稿投诉
精神世界
探索历史
哲学文学
艺术价值
信仰创造
境界审美
体验技术
技能工具
工程信息
医学生产
生活运用
操作能力

到底该用GMT8还是GMT

12月24日 栀璃鸢投稿
  简介
  最近在使用date命令时,发现表示东8区(中国时区)要使用GMT8,但在Java中却需要使用GMT8,如下:TZGMT8dated1647658144FT:z2022031910:49:0408:00如果用GMT8,反而慢了16小时TZGMT8dated1647658144FT:z2022031818:49:0408:00复制代码
  而在Java中,如下:DateTimeFormatterdtfDateTimeFormatter。ofPattern(yyyyMMddHH:mm:ssXXX);StringdateStrdtf。format(Instant。ofEpochSecond(1647658144)。atZone(ZoneId。of(GMT8)));System。out。println(dateStr);输出2022031910:49:0408:00复制代码
  这就让人有点迷糊了,经过一段时间搜索,发现在时区表达形式上还有不少知识点呢!时区的偏移量表示法
  众所周知,为了方便各地区本地时间之间的转换,人们将全球划分为了24个时区,以格林尼治天文台(GMT)为零时区,往东西两个方向分别有12个时区,所以自然有了以GMT为前缀的时区表示法,如下:
  GMT8表示东8区,中国就是使用这个时区,而GMT8表示西8区,如果格林尼治天文台的本地时间是20220319的0点,那么GMT8地区的本地时间就是20220319的8点,而GMT8的本地时间就是往前8小时,即20220318的16点。
  注意,上面的各地区本地时间的表述虽然不同,但它们实际是同一个时刻(绝对时间),要理解本地时间与绝对时间的区别。
  GMT8正是Java中支持的时区表示法,那为啥Linux中却是GMT8呢?实际上Linux中的GMT8也可以写成EtcGMT8,这才是它的标准名称,如下:TZEtcGMT8dated1647658144Is20220319T10:49:0408:00复制代码DateTimeFormatterdtfDateTimeFormatter。ofPattern(yyyyMMddHH:mm:ssXXX);StringdateStrdtf。format(Instant。ofEpochSecond(1647658144)。atZone(ZoneId。of(EtcGMT8)));System。out。println(dateStr);输出2022031910:49:0408:00复制代码
  可以发现用EtcGMT8的话,Linux与Java的输出都是一样的了,是的,EtcGMT8也是一种类似GMT8的时区表示机制,只不过它的号是反的。
  Ok,虽然上面的差异弄清楚了,但时区的表示形式还没有介绍完,接着往下看。。。
  除了GMT8表示方式外,我们还经常会看到UTC8这样的表示方式,这是UTC时区表示法。
  即生GMT何生UTC?这是由于GMT是以格林尼治天文台为时间基准,但地球不是完美球体且自转速度在变慢,所以地球自转速度并不均匀,这导致以格林尼治天文台为时间基准是不准的。
  为了更准确度量时间,科学家们发明了UTC时间,以铯原子跃迁次数来度量时间,比GMT时间更准确,为了保证GMT的准确性,每隔几年GMT时间会做一次调整,以与UTC时间对齐。
  因此,既然有了更准确的UTC,那么就有了以UTC为前缀的时区表示法,如中国时区可使用UTC8。
  各时区偏移量表示法一览表,如下:
  偏移量表示法
  描述
  GMT8
  相对GMT多8个小时
  EtcGMT8
  同GMT8,号相反
  UTC8
  同GMT8
  GMT08:00
  精确到分钟级别
  GMT08:00:00
  精确到秒级别
  GMT0800
  精确到分钟级别,省略冒号
  GMT080000
  精确到秒级别,省略冒号
  08:00
  精确到分钟级别,省略前缀
  08:00:00
  精确到秒级别,省略前缀
  0800
  精确到分钟级别,省略前缀与冒号
  080000
  精确到秒级别,省略前缀与冒号
  Z
  表示零时区,等同于GMT、UTC、GMT0、UTC0时区的区域表示法
  除了用偏移量来表示时区,为了方便,人们还按区域城市的方式来定义时区,如AsiaShanghai,AsiaHongKong都表示东8区,具体有哪些城市命名的时区,可以在时区数据库中查看。
  另外,为了简化区域时区表示法,又定义了一套时区缩写,如CST是中国时区ChinaStandardTime的缩写,可以在时区缩写中查看各种缩写定义。
  注意,一般都不建议使用时区缩写,因为时区缩写的命名经常会重复,比如CST是CentralStandardTime(北美中部标准时间UTC6)、ChinaStandardTime(中国标准时间UTC8)、CubaStandardTime(古巴标准时间UTC5)。
  由于不同软件对CST的解释可能不同,导致会出现时间相差13或14个小时的情况,这在Java搭配MySQL时经常出现,我还专门写了一篇文章mysql的timestamp会存在时区问题?,对于一定要使用时区缩写的场景,可以使用香港时区缩写HKT,它不重复且和上海处于同一个时区。
  区域表示法
  描述
  AsiaShanghai
  上海时区,即东8区
  CST
  时区缩写,慎用Java中表示时区
  在Java中和时区相关的类有TimeZone、ZoneId,其中TimeZone是老的时区类,而ZoneId是新的时区类,它有ZoneOffset和ZoneRegion两个子类,分别代表偏移量表示法和区域表示法。
  那它们都支持上述的哪些时区写法呢?写个Demo验证一下,如下:publicstaticvoidmain(String〔〕args){printZoneId(08:00);printZoneId(0800);printZoneId(GMT8);printZoneId(EtcGMT8);printZoneId(UTC8);printZoneId(AsiaShanghai);printZoneId(CST);printZoneId(Z);}publicstaticvoidprintZoneId(Stringzone){ZoneIdzoneId;if(!ZoneId。SHORTIDS。containsKey(zone)){zoneIdZoneId。of(zone);}else{zoneIdZoneId。of(ZoneId。SHORTIDS。get(zone));}TimeZonetimeZoneTimeZone。getTimeZone(zone);ZoneOffsetzoneOffsetzoneId。getRules()。getOffset(Instant。now());DateTimeFormatterdtfDateTimeFormatter。ofPattern(xxxZZZOOOOO);System。out。printf(14s28sclass:sTimeZone。offset:d,zone,dtf。format(zoneOffset),zoneId。getClass()。getSimpleName(),timeZone。getRawOffset());}复制代码
  输出如下:08:0008:000800GMT8GMT08:00class:ZoneOffsetTimeZone。offset:0080008:000800GMT8GMT08:00class:ZoneOffsetTimeZone。offset:0GMT808:000800GMT8GMT08:00class:ZoneRegionTimeZone。offset:28800000EtcGMT808:000800GMT8GMT08:00class:ZoneRegionTimeZone。offset:28800000UTC808:000800GMT8GMT08:00class:ZoneRegionTimeZone。offset:0AsiaShanghai08:000800GMT8GMT08:00class:ZoneRegionTimeZone。offset:28800000CST05:000500GMT5GMT05:00class:ZoneRegionTimeZone。offset:21600000Z00:000000GMTGMTclass:ZoneOffsetTimeZone。offset:0复制代码
  时区写法
  ZoneId
  TimeZone
  08:00
  支持
  不支持
  0800
  支持
  不支持
  GMT8
  支持
  支持
  EtcGMT8
  支持
  支持
  UTC8
  支持
  不支持
  AsiaShanghai
  支持
  支持
  CST
  支持,代表北美西部时间,非中国标准时间
  支持,代表北美西部时间,非中国标准时间
  Z
  支持
  支持偏移量表示法与区域表示法区别
  虽然偏移量表示法与区域表示法都可以表示时区,但由于夏令时的存在,它们并不完全等同。
  夏令时(DaylightSavingTime:DST),也叫夏时制,是指为了节约能源,在天亮的早的夏季,人为将时间调快一小时,以充分利用光照资源,节约照明用电。
  而中国在1986年至1991年也实行过夏令时,在19861991的每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时,夏令时结束。从1986年到1991年的六个年度,除1986年因是实行夏时制的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。
  故会有下面看起来有点奇怪的现象:DateTimeFormatterdtfDateTimeFormatter。ofPattern(yyyyMMddHH:mm:ssVV);InstantinstantInstant。ofEpochSecond(515527200);System。out。println(dtf。format(instant。atZone(ZoneId。of(AsiaShanghai))));输出1986050403:00:00AsiaShanghaiSystem。out。println(dtf。format(instant。atZone(ZoneId。of(GMT8))));输出1986050402:00:00GMT08:00复制代码
  为什么AsiaShanghai输出为3点,而GMT8输出为2点呢?原因是1986050402:00:00这个时间点中国正开始实行夏令时,时钟拨快了1小时。
  而GMT8为什么输出为2点呢?因为中国、马来西亚、菲律宾、新加坡的时区都是GMT8,只有中国在实行夏令时,而在GMT8中没法感知到区域信息,那java只能以没有实行夏令时的方法来计算本地时间了。夏令时导致的奇怪现象
  正是由于夏令时的存在,导致程序可能出现诡异的现象甚至bug,如下:由于夏令时会将2点改成3点,导致2点没了,所以date命令报错了TZAsiaShanghaidated19860504T02:00:00sdate:invaliddate‘19860504T02:00:00’TZAsiaShanghaidated19860504T03:00:00s515527200复制代码时间解析后再格式化输出,发现不一样了DateTimeFormatterdtfDateTimeFormatter。ofPattern(yyyyMMddHH:mm:ssVV);ZonedDateTimetime1ZonedDateTime。parse(1986050402:00:00AsiaShanghai,dtf);System。out。println(time1。format(dtf));输出1986050403:00:00AsiaShanghai复制代码时间加1小时,发现加了2小时或根本没变publicstaticvoidmain(String〔〕args){DateTimeFormatterdtfDateTimeFormatter。ofPattern(yyyyMMddHH:mm:ssVV);加1小时刚好夏令时开始ZonedDateTimetime1ZonedDateTime。parse(1986050401:00:00AsiaShanghai,dtf);printZonedDateTime(time1);printZonedDateTime(time1。plusHours(1));加1小时刚好夏令时结束ZonedDateTimetime2ZonedDateTime。parse(1986091401:00:00AsiaShanghai,dtf);printZonedDateTime(time2);printZonedDateTime(time2。plusHours(1));}privatestaticvoidprintZonedDateTime(ZonedDateTimetime){DateTimeFormatterdtfDateTimeFormatter。ofPattern(yyyyMMddHH:mm:ssVV);System。out。println(time。format(dtf));}复制代码
  输出如下:1986050401:00:00AsiaShanghai1986050403:00:00AsiaShanghai加1小时,结果看起来加了2个小时1986091401:00:00AsiaShanghai1986091401:00:00AsiaShanghai加1小时,结果时间看起来没变复制代码
  为啥会这样呢?原因是本地时间虽然看起来没变,但AsiaShanghai这个代表的时区却发生了变化。
  我们可以将上面printZonedDateTime中时间格式由yyyyMMddHH:mm:ssVV修改为yyyyMMddHH:mm:ssVVxxx再执行,发现输出如下:1986050401:00:00AsiaShanghai08:001986050403:00:00AsiaShanghai09:001986091401:00:00AsiaShanghai09:001986091401:00:00AsiaShanghai08:00复制代码
  如上,夏令时导致AsiaShanghai这个时区不一定是东8区了,也可能是东9区,故Java中,想将ZoneRegion转换为ZoneOffset,需要传递一个instant时刻参数,如下:输出08:00InstantinstantInstant。now();System。out。println(ZoneId。of(AsiaShanghai)。getRules()。getOffset(instant));输出09:00,在1986050402:00:0008:00处于夏令时,增加了1小时InstantinstantInstant。ofEpochSecond(515527200);System。out。println(ZoneId。of(AsiaShanghai)。getRules()。getOffset(instant));复制代码
  夏令时真是一种自欺欺人的做法,还好中国从1991年后就没再实行了!
  作者:打码日记
  链接:https:juejin。cnpost7076729170205605918
投诉 评论 转载

男性免疫性不育如何治疗免疫性不育也是常见导致不育的原因之一,那么男性免疫性不育如何治疗呢?下面就跟着本站小编一起来看一下吧!男性免疫性不育如何治疗对于由免疫因素而导致的男性不育症,仅靠单……春吃野菜,赛过吃肉,建议春天多吃5种野菜,千万别太心疼钱春吃野菜,赛过吃肉,建议经济条件允许的情况下,春天多吃5种野菜,千万别太心疼钱,该吃就吃,能吃是福!每年春天,都会听到老人家常在耳边说春吃野菜,赛过吃肉。意思就是说:春天……如何处理婆媳关系大妙招搞好婆媳关系女性结婚后,面对的一大难题就是如何处理婆媳关系,如果婆媳关系不好,这个家定是鸡犬不宁,根本无幸福可言。因此,一个和睦的家庭,一定要有一个会处理婆媳关系的媳妇。那么作为妻子该如何……正能量激励早安图片句子,超越自我,挑战极限年龄从来不是界限,除非你自己拿来为难自己。愿你活出自己想要的人生,无论何时,年华都盛开。早安,周三!给自己设立一个目标,给自己未来一个明确的希望,给自己的生活一个方向灯。……巨流河读书笔记时间到了年尾,终于断断续续地读完了《巨流河》。之所以不想很快读完,是因为这是一本很好的书,让人动情处很多,许多情节和文字需要反复品味和揣摩,有些段落必须要用笔记的形式留下来。面……春雪带着柔情飘落在八达岭长城之上三月雪飘然而至细细的雪粒洒落在巍峨的八达岭长城上灵秀婉约,洁白无瑕,翩翩飞舞装扮得长城银装素裹、蜿蜒壮美不一会,雪变成了冰晶挂满了树梢涂抹成……归还造句用归还造句大全六十一、从图书馆借出来的书都盖上了归还的截止日期。六十二、好朋友之间,只有误会,却没有仇恨,无论如何的伤人,终归还是会百倍自伤。飘灯六十三、租书的价格十分合理,运书……到底该用GMT8还是GMT简介最近在使用date命令时,发现表示东8区(中国时区)要使用GMT8,但在Java中却需要使用GMT8,如下:TZGMT8dated1647658144FT:z2022……有关于名人刻苦读书的小故事导读:读书是学习,读书是充实,读书是体味文化,读书是回顾历史,读书是精神的旅行,读书是思想的驰骋,读书是与前人会心的交流,读书是自我灵魂的感悟。下面是小编为你精选的有关于名人刻……巴蜀游记(一)心动的瞬间七月末有幸去成都听课,很突然很意外就来到了向往已久的巴蜀之地,机会难得,趁机游了九寨沟黄龙、重庆、峨眉山乐山等景。因九个藏族村寨得名的九寨沟,让我不能放下……朝阳龙辽宁小型食草恐龙长米距今亿年前说到朝阳,大家都会想到北京的朝阳群众,他们的力量是非常大的。而今天小编将要为大家介绍的是朝阳龙,它出土于辽宁的朝阳市,接下来就随小编一起去了解看看。朝阳龙基本资料体……我们是一家人我决定剪掉我的长发。坐在理发师前,我看着一缕缕长发落在陶瓷地板上所映出的倒影。看着看着,我忽然想起了两年前那天,经历了市三好落选以及同学们嘲笑的我心情十分糟糕。走出校门,……
要不把金牌都给韩国吧,呵护好他们玻璃心我的梦我设计的儿童乐园清道夫鱼能和金鱼混养吗清道夫鱼不能和什么鱼混养罗汉果枸杞茶的功效有哪些呢实例分析如何用内容塑造品牌形象性价比高的并继竿推荐老年人如何能让心理衰老晚点来列御寇偃师献技主要内容简介及赏析保湿粉底液排行榜冬季底妆就要高保湿脸上长痘痘怎么办这个方法消灭痘痘为什么很多人对煽情的事情感到反感睚眦之怨什么意思睚眦之怨典故出处介绍八月份去哪里旅游最好敏感肌肤乳液推荐敏感肌肤用什么乳液好OPPOR809T有什么接口2020中国各地市大学排名完整名单出炉心脏病老人饮食食谱王昭君与桃花鱼RedmiG游戏本2021支持高刷吗屏幕刷新率怎么样几个小技巧让你更完美如何让夫妻间越做越爱?女人这三个部位有痣克夫又招灾幼儿园教学计划发行债券需要具备什么条件

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找