一文说清楚什么是时区,夏令时,GMT和CST

为什么要有时区

    由于地球的自传公转决定了,我们生活在地球上,无法完全按照同一个时间来安排生活和社会活动。否则的话,可能有人在12:00吃午饭,但是对于另一地区来说,他们可能02:00 才对应着真正的太阳直射时间。
    所以人们便自己创建了时区机制、来保证能更合理的安排生产生活。时区机制,比自传公转这些问题更加复杂。目前世界时区的数据库,由因特网编号管理局(Interent Assigned Number Authority) IANA 来维护,每年会更新几次,来处理夏令时规则的变化。JAVA便是使用了IANA的数据库。



什么是夏令时DST(Daylight Saving Time)

一文说清楚什么是时区,夏令时,GMT和CST_第1张图片

    夏令时一般是在昼长夜短的夏季,人为的将时钟拨快一小时。假如夏天5点天亮,如果作息习惯不变,按照原来的习惯,早上6点关灯的话,就浪费了一小时的电量。所以当夏天来临,就实行夏令时机制,将始终拨快,这样的话,原本五点天亮,六点关灯,就变成了,五点天亮,五点关灯,因为始终拨快后的六点,便对应着原来的五点了。

    我国停止使用夏令时 我们在1986年开始使用夏令时,在1991年宣布不再使用。夏令时有种掩耳盗铃的意味,在不同的季节,调整作息时间比起粗暴的波动时针可能更合理 1、夏令时相当于强制改变人的作息习惯 2、夏令时造成某些时间出现两次极其混乱 3、我国横跨五个时区,夏令时并不够通用 4、节约的照明电量有限,反而会增加制冷耗电



CST和GMT

GMT (Greenwich Mean Time) 格林威治标准时,用标准世界时UTC表示则为UTC+0

CST

  1. 在中国表示中国标准时,对应已命名的时区标准就是Asia/Shanghai
  2. Asia/Shanghai会兼容地区的历史上各个时间节点,例如中国1986~1991实行了夏令时,在1992年开始 CST 就和UTC+8完全一致了。
  3. 我国虽然横跨五个时区,但是为了方便生产生活,统一只用了一个时区 CST
  4. JAVA还有个OffsetDateTime类,专门用来处理只带有UTC偏移量的时间,但是没有关联地区的时区规则,一般用来处理不需要时区规则的程序。对于人类的时间,应使用ZonedDateTime



java对夏令时的处理

  1. 夏令时开始时,直接把时间往后调一小时,那么对于LocalDate将直接消失1消失,如果使用消失的LocalDate来初始化一个ZoneDateTime 那么生成的ZoneDateTime时间会和尝试设置的不同,但是这是正确的。
  2. 夏令时结束时,直接把日期往前调整1消失,对于LocalDateTime来说,同样的一个小时,将会出现两遍。用这个重复的时间来初始化ZoneDateTime 那么将会得到第一次的那个时间。对于LocalDateTime来说,一天内的这个重合的时间完全一样,但是对于ZoneDateTime来说,偏移量是有区别的。
  3. 对于跨夏令时的时间处理,为了和人类的时间一致,不能直接添加Duration对象,而应该使用Period对象来进行处理。

你可能感兴趣的:(基础知识,其他,java)