作为90后的我一直以为中国是没有夏令时的概念的,直到上次项目中碰到一个问题。

问题是这样的,客户在管理后台录入一个人员的生日是1989-05-23可是到ios上发现日期是1989-05-22。因为前后端使用的时间戳来传递时间的,在ios上格式化为YYYY-MM-DD HH:mm:ss之后打印发现是1989-05-22 23:00:00。而在androidchrome上打印的都是1989-05-23 00:00:00。足足少了一个小时。

在中国的话一般时间上少8小时,那么可能是国际标准时间和北京时间的时差导致的,一个小时倒是很少见。不过之前做过一个国际的项目,针对欧美那边的用户有个叫夏令时冬令时的差别,这个恰好是有一小时的前后调整。会不会是夏令时导致的呢?

于是在chromesafari上试了一下:


// chrome
new Date(1989, 4, 23) // Tue May 23 1989 00:00:00 GMT+0900 (中国夏令时间)// safari
new Date(1989, 4, 23) // Tue May 23 1989 00:00:00 GMT+0800 (CST) = $6复制代码

我们可以看到chrome自动针对当地时区做了夏令时转换,后面的时区是GMT+0900,而safariGMT+0800

查了一下,原来中国在86年-92年实行了一段时间的夏令时:

1986年4月,中国中央有关部门发出“在全国范围内实行夏时制的通知”,具体作法是:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时,夏令时结束。从1986年到1991年的六个年度,除1986年因是实行夏时制的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。在夏令时开始和结束前几天,新闻媒体均刊登有关部门的通告。1992年起,夏令时暂停实行。

因此在chrome中转换为时间戳的时候,本身就少了一个小时的时间。

// chrome
new Date(1989, 4, 23).getTime() // 611852400000// safari
new Date(611852400000) // Mon May 22 1989 23:00:00 GMT+0800 (CST) = $7复制代码

这时候我们在消费这个时间戳的时候就不好判断原有的时间是什么了。仅仅针对生日这种特殊情况来处理的话,因为上传的时间肯定是某日的零点的时间,因此,检测是23点的时候,我们可以加一个小时,但是除了这种特殊情况我们就不好处理了。

想要根治这种问题,我们就需要在生产这个时间戳的时候就要针对夏令时做处理。比如说检测new Date().toString()中是否包含夏令时或者+0900这样的字符串。如果有则说明进行了夏令时转换。这时候我们的时间戳就需要在原有的基础上加上1h的时间。或者使用momentjs的检测是否进行夏令时转换函数判断也可以。

转载于:https://juejin.im/post/5d03042d6fb9a07ec755178a

关于中国的夏令时转换相关推荐

  1. 格林时间:Thu May 18 2017 00:00:00 GMT+0800 (中国标准时间) 格式转换

    类似Thu May 18 2017 00:00:00 GMT+0800 (中国标准时间)格式的时间转换成2017/05/18 或取其时分秒,方法如下: /** * @param datdString ...

  2. linux获取夏令时时间,关于时区:获取C中时区的夏令时转换日期

    在C中,是否有一种简单的跨平台方法来检索给定时区开始和结束夏令时的日期? 我已经有时区偏移信息以及当前是否正在观察夏令时,但我确实需要夏令时开始和结束的日期(对于我无法控制的外部依赖). 在Windo ...

  3. python CST中国标准时间格式转换

    def trans_format(time_string, from_format, to_format='%Y.%m.%d %H:%M:%S'):""" @note 时 ...

  4. 汉字风格迁移篇--KAGAN:一种中国诗歌风格转换的方法

  5. 时间戳和时间的相互转换,以及中国本地时间转换成国外时间

    1.时间戳换成时间: function timetamp(time){var date = new Date(time);//时间戳为10位需*1000,时间戳为13位的话不需乘1000var Y = ...

  6. python CST 中国标准时间格式转换

    def time_format(time_string, from_format, to_format='%Y.%m.%d %H:%M:%S'):"""@时间格式转化:p ...

  7. 关于java时区转换夏令时问题及解决办法

    关于中国的夏令时问题:参考另外一篇: https://blog.csdn.net/u011165335/article/details/78924498 这里:主要讲的是: 在夏令时结束的时候,jav ...

  8. java拨钟,关于时间的那些事 - 中国也曾实行过夏令时,你知道吗?

    之前遇到过一个由于标准时间/夏令时时间转换引起的问题,这里记录下来分享给大家. 大家都知道,地球上按照经度分成24个时区,每个时区相差一个小时.一般来说每个国家法定的时间都对应一个时区,比如中国用的东 ...

  9. 数仓是如何与“夏令时”愉快的玩耍?

    摘要:主要讲述夏令时的起源,发展,标准化以及如何在GaussDB中查询任一时区的夏令时规则. 本文分享自华为云社区<DWS如何与"夏令时"愉快的玩耍!>,原文作者:le ...

最新文章

  1. 数据结构与算法:01 绪论
  2. Python集合之set()使用方法详解
  3. Apple Music 会员免费领啦!
  4. eclipse恢复默认布局
  5. VS2008常见编译错误(总结篇)
  6. 多线程基础-常用线程方法(三)
  7. 在虚机上安装WIN2003
  8. 需要vmwareinstalldisk上的文件vmnet_手机上一键就能进行PDF与其他文件的相互转换,果然厉害到不行...
  9. 卸载pip、setuptools
  10. JSON(5)---JSON.stringify()
  11. 2.4 HDFS组成架构
  12. PHP 实现敏感词过滤(附敏感词库)
  13. IE-LAB网络实验室:思科CCNP考几门?
  14. Java基础之集合篇(内容超详细,带你轻松搞懂List、Set和Map的使用)
  15. gatk过滤_GATK使用方法详解(原始数据的处理)
  16. gazebo构建仿真场景并制作机器人模型
  17. 阿里技术专家楚衡:架构制图的工具与方法论
  18. vba操作ie关闭窗口
  19. 《梦的解析》-西格蒙得·弗洛伊德
  20. 不规则形状或图片添加阴影效果

热门文章

  1. Python基础(三)列表、元组、字典、集合
  2. linux如何编译Intel网卡驱动源码,并进行安装
  3. [USACO 2009 Dec S]Music Notes
  4. 字节跳动进场,二手车没等来新故事
  5. 离散信号的抽取与内插
  6. 活体检测——CelebA-Spoof
  7. 刷卡门禁或PN532刷卡门禁
  8. 计算机毕设 SSM+Vue个人健康管理系统 个人健康档案系统 个人健康信息管理系统Java Vue MySQL数据库 远程调试 代码讲解
  9. Futaba T16sz设置pixhawk六种飞行模式
  10. matlab怎么定义矩阵变量_matlab文档(一)matlab入门