作为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. 03-VTK基础概念(2)
  2. 将Facebook整个托管在AWS上,这可行吗?
  3. sh256sum、xxd、base64联合计算文件的hash
  4. 缓存2 动态缓存 memcached
  5. Android 学习笔记【基础扫盲篇】
  6. (HoneyView)轻便好用的免费图片浏览器
  7. Volley(六 )—— 从源码带看Volley的缓存机制
  8. python的requests的使用
  9. 网吧服务器系统介绍,网吧服务器系统
  10. java毕业设计——基于java+JSP+MySQL的网上订餐管理系统设计与实现(毕业论文+程序源码)——网上订餐管理系统
  11. python用openpyxl模块操作Excel学习笔记
  12. 什么是Flex布局?
  13. 用python解决放苹果问题_[18/11/24] 递归解决-放置苹果问题
  14. 数据科学导引上机(5)
  15. 谷歌浏览器扩展程序XDM_这才是谷歌浏览器的正确打开方式,有效节省内存占用,流畅飞起...
  16. Unity 调用C# Speech类将文字转换为语音
  17. 广达做微软服务器,微软联手广达布局云计算 称策略是软件加服务
  18. Gym实践(一)——环境安装
  19. 【学习笔记】builtin函数
  20. Python爬虫快速入门:基本结构简单实例

热门文章

  1. BZOJ 2400(网络流最小割)
  2. Profinet在制丝线自动化系统中的应用
  3. Enigma Protector脱壳
  4. 周怎么换算成月_嘉会班三年级第十六周(2020年12月14日—12月18日)
  5. 狂奔的蔚来:上市背后的必然与隐忧
  6. 1. 需求分析设计方案
  7. c语言标准模板小顶堆,堆排序(大顶堆、小顶堆)----C语言
  8. url自动编码问题,包含; / ? : @ = + $ , #的密文Http url请求问题
  9. Linux使用apt安装库,究竟怎样才可以更快?
  10. python入门(@property,@*.setter)