时区问题总是个比较麻烦的问题,客户端与服务器的时区不一致自然是理所当然的事情,而对于多台服务器或者分布式再或者炙手可热的云,时区不统一也很正常,而且也不需要统一,还好有个时间戳的概念,通过时间戳就可以保证交互的过程中始终讨论的是同一个时间

时区问题总是个比较麻烦的问题,客户端与服务器的时区不一致自然是理所当然的事情,而对于多台服务器或者分布式再或者炙手可热的云,时区不统一也很正常,而且也不需要统一,还好有个时间戳的概念,通过时间戳就可以保证交互的过程中始终讨论的是同一个时间。

但是有些时候时间戳并不能满足要求,比如对于一个按天统计的报表,日期范围的选择来自于客户端,通过时间戳我们可以保证服务端返回的数据是属于客户端选择的日期范围中的,但是按天做统计就出现问题了。

服务器端是以mysql作为数据库,其中一张表名为session,其中记录时间戳的字段为ts,在做按日期分组查询时,主要的依据就是ts。

通过很简单的分组GROUP BY date(from_unixtime(ts))就可以统计到每天的记录数。

而这里from_unixtime得到的日期对象是以格林尼治时间为准的,也就是时区为+00:00

例如客户端需要展现2011年1月1日零时至2011年1月10日零时(不包含)的按天统计报表,客户端时区为+08:00,服务器处理此请求时,查询的结果可能会多出2011-01-10这个分组,原因是此时的分组时区不是客户端所期望的。

mysql提供了时区转换的函数CONVERT_TZ,通过它将from_unixtime得到的日期转换为客户端指定的时区就可以解决上面的问题了。

下面通过对比可以看出,统计出的结果是有很大区别的,而后者才是正确的。

SELECT from_unixtime(ts), count(*) AS num FROM session GROUP BY date(from_unixtime(ts))

2011-11-25 06:01:35 2011-11-25 14:01:35 105

2011-11-26 01:42:27 2011-11-26 09:42:27 28

2011-11-27 00:12:32 2011-11-27 08:12:32 39

2011-11-28 00:43:40 2011-11-28 08:43:40 70

SELECT from_unixtime(ts), count(*) AS num FROM session GROUP BY date(CONVERT_TZ(from_unixtime(ts),’+00:00′,’+08:00′))

2011-11-25 06:01:35 2011-11-25 14:01:35 95

2011-11-25 16:54:23 2011-11-26 00:54:23 22

2011-11-26 16:26:29 2011-11-27 00:26:29 33

2011-11-27 16:50:08 2011-11-28 00:50:08 92

对于extjs而言,客户端的时区信息可以这样获取:

Ext.Date.getGMTOffset(new Date());

返回’+0800′,使用时需要处理一下。

对于纯js:

new Date().getTimezoneOffset()/60;

返回-8,为什么呢?有空去查一下看看。

mysql支持的时区列表_mysql按天分组支持时区相关推荐

  1. java 时区 列表_浅解 JAVA与时区

    时区转换 主要介绍一下 Java 时区转换相关的一些概念,和转换示例. 由于夏令时的存在,应该通过Java 或者 DB 提供的方法来转换. JAVA 时间的时区转换 Java Date 支持 UTC ...

  2. mysql 范围内日期列表_MySQL:即使没有记录,也选择范围内的所有日期

    慕桂英546537 我希望你能弄明白其余的.select  * from (select date_add('2003-01-01 00:00:00.000', INTERVAL n5.num*100 ...

  3. mysql sum计算效率很慢_MySQL基础之分组函数

    分组函数主要用于统计,又称为聚合函数.统计函数或组函数. 常见的分组函数有: SUM(expr) 求和AVG([DISTINCT] expr) 求平均值MAX(expr) 求最大值MIN(expr) ...

  4. mysql支持啥系统_MySQL支持的操作系统列表MySQL综合 -电脑资料

    我们使用GNU Autoconf,因此将MySQL移植到所有使用Posix线程和C++编译器的现代系统是可能的, 已经报告MySQL可以在下列操作系统/线程包的组合上成功地进行编译.注意,对于很多操作 ...

  5. mysql 设置时区_MySQL实战干货 | 如何处理由时区设置引发的 SQL 执行“卡顿”?...

    作者:田杰,阿里云数据库高级运维专家 查询执行时间长引发应用感知 "卡顿" 的场景在数据库的日常支持和使用中并不少见,但由于时区设置引发的 SQL 执行"卡顿" ...

  6. mysql支持数据安全的引擎_MySQL 支持的存储引擎

    存储引擎: 数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作. 不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎还可以获得 ...

  7. mysql 时区时间_MySql的时区(serverTimezone)引发的血案

    前言 mysql8.x的jdbc升级了,增加了时区(serverTimezone)属性,并且不允许为空. 血案现场 配置jdbc的URL:jdbc:mysql://[IP]:[PORT]/[DB]?c ...

  8. mysql时区作用_mysql 时区问题

    1.问题源自何处? 之前用的mysql 8.0以上的版本连接时都需要在url后面加 serverTimezone=UTC 实际上是指出核数据库的时区为美国.因为我们的数据库的时区是美国的,而我们连接的 ...

  9. mysql 建表 日期格式_MySQL建表时,日期时间类型选择

    MySQL(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DA ...

最新文章

  1. 【存储知识学习】第三章磁盘原理与技术3.4硬盘接口技术和SCSI硬盘接口--《大话存储》阅读笔记
  2. mysql2阶段提交具体实现_ShardingSphere 4.x 分布式事务之实现原理
  3. VTK:图片之ImageSeparableConvolution
  4. 随手查_AD画板粗略步骤
  5. 渗透测试-主动信息收集(3)
  6. Linux为硬盘重建MBR,linux重建mbr
  7. JS所有国家 数组与对象
  8. 杂评 360和腾讯之争
  9. 项目上线质量如何评估
  10. 吉安梵媛:人间最美是——原谅!
  11. Qt6 QML Book/图形效果/粒子群组
  12. Ubuntu16.04安装播放器软件SMPlayer
  13. 【文献学习】Complex-Valued Convolutions for Modulation Recognition using Deep Learning
  14. Cross-modal Pretraining in BERT(跨模态预训练)
  15. 每日爬虫练习—爬PPT
  16. 张生情迷崔莺莺,襄王意欲会神女——新说莺莺传之二
  17. 长生诀linux架设教程,手游【长生诀】VM一键即玩服务端+GM工具+图文教程
  18. pyqt5做了一个无线网连接器,与君共勉
  19. 小程序去除button按钮的默认样式
  20. 河北省邢台市谷歌高清卫星地图下载

热门文章

  1. skywalking oap-server 域名配置
  2. Centos7安装MySQL(多图)
  3. 04-Flutter移动电商实战-打通底部导航栏
  4. RedisTemplate在项目中的应用
  5. Program type already present: android.support.design.widget.xx
  6. linux编译c++ 静态库,C/C++ 条件编译静态库
  7. java kafka 集群消费_kafka集群简单生产者消费者实例
  8. Stack Overflow
  9. mysql二维数据转一维存_二维数组转一维数组
  10. 实验15 安装新的int 9中断例程