上周服务器在结算竞技场的时候发生了结算在积分清零只后的问题,但实际上服务器代码里的时间是写死的,逻辑先后在内网测试的时候是没有问题的,所以发生这一现象实在令人百思不得解。

后来查看日志,发现清零时间确实提早了一个小时,那么问题来了,这一个小时呢?和时区有关么?

很幸运,策划组里有个在美国待过一阵的伙伴,他找到了问题-夏时令。

什么是夏时令

夏令时的英文是『Daylight Saving Time』,顾名思义,其目的是节约能源,那么它是怎么实现节能的呢。

在夏天:

橙色代表白天,绿色代表非睡眠时间。夏天昼长夜短,注意到,把作息提前一小时之后,需要开灯的时间就少了一小时。

在冬天:

冬天昼短夜长,调整作息并没有什么作用。

而冬季调整作息也没用的原因是:早上天还是黑的,所以就算作息提前,早上还是得开灯…

于是乎:

(1)西方人拨时钟

美国夏时制实行与否,完全由各州各郡自己决定。美国不实行夏令时的地区包括:
1)亚利桑那州的大部分地区不使用夏令时,但是屬納瓦霍族保留區的地區使用夏令时
2)夏威夷州
3)波多黎各和维京群岛
4)美属萨摩亚、關島和北馬里亞納群島

美國原本於每年4月的第一個星期日凌晨2時起至10月的最後一個星期日凌晨2時實施夏令時間;但經美國國會2005年通過的能源法案,自2007年起延長夏令時間,開始日期從每年4月的第一個星期日,提前到3月的第二個星期日,結束日期從每年10月的最後一個星期日,延後到11月的第一個星期日。

加拿大夏时制實施日期一向跟美國一致,在美國2005年修法後,加拿大各省也在2007年3月美新法實施前完成修法。加國好幾個處於時區邊界的地區(包括薩斯喀徹溫省大部分地區和其他幾個較小地區)不實施夏时制。另外,加國春秋撥鐘時刻由各省自行決定,但在紐芬蘭2011年修法以後,現在全國都跟美國一樣在凌晨2時撥鐘。

大家想感受一下冬令时的话,在系统->通用->日期与时间里 关闭自动设置,然后打开时区搜索 哈瓦那(古巴的一个时区),然后将时间调整到2015年11月1日,00:59。等一分钟时间会自动跳到00:00(不会死循环的…)

(2)中国古代是“改钟”

在古代中国,冬至白天45刻,随后每九天加一刻,至夏至65刻,然后每九天减一刻。钦天监每九天换一次漏尺。

(3)中国现代主要是改作息时间

曾经我国也实行过夏时令,实施夏时制方案后,当年全国实际节约用电6.27亿度,1987年为7.54亿度,从节能角度讲,效果是非常不错的。另一方面,自建国以来,就不断有人提出夏时制的方案,国务院长期搁置这一建议的原因是,反对的呼声更加强烈,比如铁路、民航部门强调时间表每年变动两次,会显著增加运营成本。另外有观点认为,夏时制对低纬度地区的作用有限,反而会给当地居民造成诸多生活不便。

夏令时实施前后,正方和反方的态度没有变化,所描述的情况也基本属实,那么,为什么国务院要到1986年才采纳夏令时的意见,又在1992年初,否定了之前的决策?分析并解决这个问题,我觉得应该抓住最大的一个变量:电力供应。

由于改革开放和重工业的飞速发展,到1986年,中国的电力供应缺口达到了两成左右,再找不到短期解决办法的情况下,国务院通盘考虑,决定采纳此前弃之不用的夏令时方案。1991年,秦山核电站正式启用,在建的大亚湾核电站也将在两年后投入商业运行。当时我国电力企业的技术、设备的更新换代工作初具成果,建成了多座水电站,我国的发电方式日益多元化,电力供应问题得到了一定程度的缓解,此时,反对夏时制的力量再次占据上风。

几年后,电力紧张再次席卷全国,2007年秋天,国家能源研究所曾进行过全国调研,最后的结论是,当前采用夏时制,只会对照明用电有所效果,相比较而言,采用弹性工作制,普及节电设备,更有利于实现节能减排的目标,由此,夏时制在中国短时间内没有翻身的可能了。

服务器解决方案

这里先介绍几个概念:

GMT
GMT 是 Greenwich Mean Time 的缩写,译为中文为“格林威治标准时间”或“格林尼治标准时间”,直译的话,可译为“格林威治平时”或“格林尼治平时”。这里的格林威治位于英国伦敦东南方向的泰晤士河畔,美国也有个格林威治镇,不过与时间没关系。

UTC
UTC 是 Coordinated Universal Time 的缩写,译为中文为“世界标准时间”,直译的话,可译为“协调通用时间”或“协调世界时间”。目前来说也就是指 GMT 时间。为什么说目前就是指 GMT 时间呢?因为本初子午线(子午线即经线,本初子午线即 0 度经线)其实穿过的是沙特阿拉伯西边的麦加,而不是英国的格林威治。当时英国皇家学会暂时确定格林威治为本初子午线的穿过点﹐加之英国正是兴旺发达时期,全世界就将错就错,用到现在。说不定哪天改为麦加时间为标准时间也不是没有可能。所以我们一般使用 UTC,而不是 GMT。

PDT
PDT 是 Pacific Daylight Time 的缩写,译为中文为“太平洋夏令时间”,比 UTC 时间晚 7 小时。Google 曾在其 AdSense 中提到“在 09-6-13,我们的工程师会在 PDT 大约 上午10:00 到 下午2:00 对网站进行维护。”
其实除了 PDT 时间,北美地区还有很多时间:
美国夏季始于每年4月的第1个周日,止于每年10月的最后一个周日。夏令时比正常时间早一小时, 与PDT时间相对应的是PST , Pacific Standard Time 。 夏时制结束后就是PST

NST - Newfoundland Standard Time 纽芬兰标准时间
NDT - Newfoundland Daylight Time 纽芬兰夏令时间
AST - Atlantic Standard Time 大西洋标准时间
ADT - Atlantic Daylight Time 大西洋夏令时间
EST - Eastern Standard Time 东部标准时间
EDT - Eastern Daylight Time 东部夏令时间
CST - Central Standard Time 中部标准时间
CDT - Central Daylight Time 中部夏令时间
MST - Mountain Standard Time 山地标准时间
MDT - Mountain Daylight Time 山地夏令时间
PST - Pacific Standard Time 太平洋标准时间
PDT - Pacific Daylight Time 太平洋夏令时间
AKST - Alaska Standard Time 阿拉斯加标准时间
AKDT - Alaska Daylight Time 阿拉斯加夏令时间
HAST - Hawaii-Aleutian Standard Time 夏威夷-阿留申标准时间
HADT - Hawaii-Aleutian Daylight Time 夏威夷-阿留申夏令时间

PST
PST是太平洋标准时间(西八区),与北京时间(东八区)时差-16个小时,也就是北京时间减去16就是PST时间。而PDT比PST早1个小时,就是说PDT与北京时间时差为-15小时

夏令时
Daylight Saving Time 或 Daylight Time。
美国和加拿大原本于每年10月的最后一个星期日凌晨2时起实施冬令时间;4月的第一个星期日凌晨2时起,恢复夏令时间。
但是根据 美国国会最新通过的能源法案,为加强日光节约,自2007年起延长夏令时间,开始日期从每年4月的第一个星期日,提前到3月的第二个星期日,结束日期从每年10月的最后一个星期日,延后到11月的第一个星期日。换言之,冬令时间将缩短约一个月。之所以安排在周日,是为了便于生活的调整不至于受到较大的影响。
Linux 系统改变时区的命令 timeconfig
或者cp /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

2010年美国夏令时: 美国2010年夏令时将于3月14日当地时间早上02:00开始
届时时间服务器会从01:59:59 自动跳到03:00:00

对于java中的时间:

  1. 原来Java中不是每天都是标准的24个小时,可能是23,也可能是25
  2. 日期的计算,使用Calendar提供的API,是不会出差错的,简单的new Date(long milliseconds)可能并不靠谱
  3. 来自多方协作的项目,最好使用统一的时间标准,例如系统时间,或是统一时区
  4. 好消息是,从1992年开始,中国已经停止使用夏令时。

由夏时令引起的java世界时间不一致问题相关推荐

  1. Linux系统时间和java的时间不一致

    原因:操作系统时区跟JVM的时区不一致 解决: 启动java时配置参数-Duser.timezone=GMT+8 在程序中设定时区 配置Linux时区/etc/sysconfig/clock (jre ...

  2. java 计时_Breitling(百年灵)世界时间终极计时腕表

    所有热爱旅行的冒险家可以尽情期待,一款适合所有手腕的全新尺寸"旅行计时腕表"将在今年巴塞尔表展上华彩亮相.百年灵世界时间终极计时腕表(Chronomat 44 GMT),适合腕间的 ...

  3. java 世界协调时间格式_Java核心教程之常见时间日期的处理方法

    Java日期处理类Date详解 时间的基础知识 时区:整个地球分为二十四时区,每个时区都有自己的本地时间. 为了统一起见,使用一个统一的时间,称为全球标准时间(UTC,Universal Time C ...

  4. java日期时间详解

    一.简介 java中的日期处理一直是个问题,没有很好的方式去处理,所以才有第三方框架的位置比如joda. 文章主要对java日期处理的详解,用1.8可以不用joda. 1. 相关概念 首先我们对一些基 ...

  5. 2020年java缺人_Java回顾#5 –到2020年,什么将改变Java世界?

    2020年java缺人 最后,看看您的水晶球–到2020年,什么将改变Java世界? JDK 14有望带来非常有趣的新功能,即使其中一些功能仍处于预览状态. 我很好奇开发人员将如何使用记录(JEP 3 ...

  6. 当音乐学博士搞起编程,用一本书改变了Java世界!

    前言 说到Spring,也许现在的开发者们最先想到的是 Josh Long 超快的语速与现场代码能力,让很多Java开发者折服. 然后Spring的历史上,最传奇的还是要数其创始人:Rod Johns ...

  7. Zygote——Android系统中java世界的受精卵

    0.引言 Android的底层内核是基于Linux构建而成,是在Native世界,而Android上层的应用是隶属Java世界.那么在Android系统启动过程中,系统是如何从Native孵化出Jav ...

  8. Java日期时间调整的几种方式

    一.Calendar类 我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用 ...

  9. 20145226 2016-2017-2 夏艺华 《Java程序设计》 课程总结

    20145226夏艺华 <Java程序设计>课程总结 每周读书笔记链接汇总 第一周读书笔记 了解Java编程风格,认识Java的类型与变量,掌握Java流程控制的方法(分支.循环). ht ...

最新文章

  1. 点击文字弹出一个DIV层窗口代码 【或FORM表单 并且获取点击按钮的ID值】
  2. OpenGL基于PBR的图像的光照IBL的实例
  3. 【原】UCS-2和UTF-8的互相转换
  4. mininet 应用实践
  5. python里 try里怎么用int函数_如何在不使用try / catch的情况下测试Python枚举中是否存在int值?...
  6. pycharm 怎么快速生成文件夹结构_为什么Python代码能运行但是PyCharm给我画红线?...
  7. 揭秘315黑客wifi,如何保障APP数据安全
  8. webgl 包围盒子
  9. Webpack入门教程三十
  10. Greenrobot-EventBus源码学习(四)
  11. win11还原win10磁贴方法ExplorerPatcher,替代Start 11、StartALLBack(开源免费~)
  12. 【图像配准】基于surf算法实现图像配准附Matlab代码
  13. oracle碎片产生原因,oracle碎片小结
  14. 计算机与网络时间同步,电脑时间同步,教您怎么让电脑时间和网络时间同步
  15. CSS垂直居中img
  16. 【DL】第 1 章:神经网络相关核心概念
  17. 医学图像DICOM文件解析——DICOM内部信息详解篇
  18. 一、HTML、HTTP、web综合问题
  19. 基于Git子模块的微前端项目管理和公用组件库方案
  20. MacBook(m1) 通过brew安装PHP环境

热门文章

  1. 802.11ac协议白皮书阅读笔记
  2. VUE中fetch结合支付宝API验证银行卡号
  3. 在职MBA与普研、MEM是有区别的
  4. 实用的自然码双拼口诀
  5. oracle快速复制一个表
  6. shopnc2014年11版数据库字典
  7. Lagrange乘子法与KTT条件
  8. OpenJ_Bailian 2748
  9. 【RL】3.基于表格方法求解RL
  10. kali渗透学习-windos缓存区缓冲区溢出漏洞实战