一文说清楚什么是时区,夏令时,GMT和CST
为什么要有时区
由于地球的自传公转决定了,我们生活在地球上,无法完全按照同一个时间来安排生活和社会活动。否则的话,可能有人在12:00吃午饭,但是对于另一地区来说,他们可能02:00 才对应着真正的太阳直射时间。
所以人们便自己创建了时区机制、来保证能更合理的安排生产生活。时区机制,比自传公转这些问题更加复杂。目前世界时区的数据库,由因特网编号管理局(Interent Assigned Number Authority) IANA 来维护,每年会更新几次,来处理夏令时规则的变化。JAVA便是使用了IANA的数据库。
什么是夏令时DST(Daylight Saving Time)
夏令时一般是在昼长夜短的夏季,人为的将时钟拨快一小时。假如夏天5点天亮,如果作息习惯不变,按照原来的习惯,早上6点关灯的话,就浪费了一小时的电量。所以当夏天来临,就实行夏令时机制,将始终拨快,这样的话,原本五点天亮,六点关灯,就变成了,五点天亮,五点关灯,因为始终拨快后的六点,便对应着原来的五点了。
我国停止使用夏令时 我们在1986年开始使用夏令时,在1991年宣布不再使用。夏令时有种掩耳盗铃的意味,在不同的季节,调整作息时间比起粗暴的波动时针可能更合理 1、夏令时相当于强制改变人的作息习惯 2、夏令时造成某些时间出现两次极其混乱 3、我国横跨五个时区,夏令时并不够通用 4、节约的照明电量有限,反而会增加制冷耗电
CST和GMT
GMT (Greenwich Mean Time) 格林威治标准时,用标准世界时UTC表示则为UTC+0
CST
- 在中国表示中国标准时,对应已命名的时区标准就是Asia/Shanghai
- Asia/Shanghai会兼容地区的历史上各个时间节点,例如中国1986~1991实行了夏令时,在1992年开始 CST 就和UTC+8完全一致了。
- 我国虽然横跨五个时区,但是为了方便生产生活,统一只用了一个时区 CST
- JAVA还有个OffsetDateTime类,专门用来处理只带有UTC偏移量的时间,但是没有关联地区的时区规则,一般用来处理不需要时区规则的程序。对于人类的时间,应使用ZonedDateTime
java对夏令时的处理
- 夏令时开始时,直接把时间往后调一小时,那么对于LocalDate将直接消失1消失,如果使用消失的LocalDate来初始化一个ZoneDateTime 那么生成的ZoneDateTime时间会和尝试设置的不同,但是这是正确的。
- 夏令时结束时,直接把日期往前调整1消失,对于LocalDateTime来说,同样的一个小时,将会出现两遍。用这个重复的时间来初始化ZoneDateTime 那么将会得到第一次的那个时间。对于LocalDateTime来说,一天内的这个重合的时间完全一样,但是对于ZoneDateTime来说,偏移量是有区别的。
- 对于跨夏令时的时间处理,为了和人类的时间一致,不能直接添加Duration对象,而应该使用Period对象来进行处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)