您现在的位置是:首页 > 学无止境
因闰秒造成的误差
转载自:http://www.gracecode.com/archives/3036/
项目中碰到 PHP 和数据库之间,计算存在时间计算误差。大致的情况为根据段时间字符串,例如
2012-12-14 00:00:00 UTC
使用 MySQL 的 UNIX_TIMESTAMP 函数以及 PHP 的 strtotime 计算得出的时间戳,大概有半分钟(差不多有28秒)的误差。
同时,比较‘诡异’的是直接使用当前时间(MySQL 中 UNIX_TIMESTAMP 不带参数,同时 PHP 直接使用 time 函数),却不存在误差。
排除了 PHP 和 MySQL 之间因为时区设置造成的时间误差 -- 根据经验,如果是时区设置造成的时间误差,应该有几个小时不会那么少。
搜索解决问题期间扫了下这篇帖子 ,觉得应该是‘闰秒’ 这玩意造成的问题。搜索 PHP 闰秒相关的配置似乎没有相关的,不过在这里似乎找到了些答案 。
You also can experience this behavior if your system timezone
is with leap seconds. To avoid the problem in this case please
run query UPDATE mysql.time_zone SET Use_leap_seconds='N'
and restart the server. Please inform us if this helps.
按照上述的步骤执行,解决了问题。
回过头来,我在工作机(Windows)上测试,发现并不起作用。研究了下,原来闰秒也需要操作系统的支持 :
1、对于大多数新的 Linux 内核,在设计时它们都是支持闰
秒的,这一点在 REHL4/5 的 2.6.x 内核中得到肯定。
2、如果 Linux 系统没有配种某种时间同步机制(比如NTP),
那么和闰秒无关,唯一导致的结果只是系统时间会比 UTC
时间快一秒。
3、Window Time Service 不支持闰秒,包括服务器和客户端。
回过头来考虑项目中碰到的这种情况,直接使用时间戳存储时间点会更精确些。最后,提供下相关的测试脚本 ,看看你的环境是否也会有类似的问题。
下一篇:一些javascript题目
文章评论
- 登录后评论
点击排行
-
php-fpm安装、配置与优化
转载自:https://www.zybuluo.com/phper/note/89081 1、php中...
-
centos下postgresql的安装与配置
一、安装(以root身份进行)1、检出最新的postgresql的yum配置从ht...
-
Mysql的大小写敏感性
MYSQL在默认的情况下查询是不区分大小写的,例如:CREATE TABLE...
-
关于URL编码
转载自:http://www.ruanyifeng.com/blog/2010/02/url_encoding....
-
header中的Cache-control
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的...