时区转换的问题--解决篇

薄洪涛6年前Linux1145

事情是这样的,我最近做一套DNS服务器的解析的脚本,其中DNS服务器上有一条命令是这样的

 [root@qip1200 ~]# date
Thu Oct 25 20:33:02 HST 2018

很明显,这是查看时间的命令

需求是,我拿到DNS服务器上面的时间,与本地进行对比,看是否相差在5min之内,如果超出5min抛出异常;

难点是啥呢,是DNS服务器的时区是不一样的,有CST,HST等等一系列时区,因为DNS对时间比较敏感,容易出问题,前期时区还没统一,然后执行程序的机器如果要做时间差运算的话,那就需要统一时区;

最初的想法是,把 Thu Oct 25 20:33:02 HST 2018 转换成 2018-10-25 20:33:02 HST(点我查看转换方法),再把执行程序的机器时区设置成HST,获取现在的时间,然后对比时间戳做差...

这样弊端就很明显,我必须要兼容所有的时区,我数了数,差不多100多个吧,而且,还有冲突,就拿CST来说

TIM图片20181122134931.png

这就很不友好了

然后我翻了翻linux的date命令,发现这样一个参数


TIM截图20181122135255.png

加一个参数 %s ,可以输出当前时间的时间戳,这里要注意啊,时间戳是不区分时区的!!

TIM截图20181122133949.png

时间戳,指的就是Unix时间戳(Unix timestamp)。它也被称为Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。因此,严格来说,不管你处在地球上的哪个地方,任意时间点的时间戳都是相同的。这点有利于线上和客户端分布式应用统一追踪时间信息。

我做了个实验

微信图片_20181122135516.png

发现了吗,同一时刻,不同时区,时间不一样,但是时间戳是一致的(这里使用了一台洛杉矶的服务器,一台中国的服务器;)

这样事情就简单多了,在DNS服务器上我们只需要执行命令的时候带个%s , 然后解析的时候,获取现在的时间戳,做差判断就好了;


相关文章

如何让命令在关闭终端后继续执行

我们在执行一些比较耗时的脚本的时候,必须要保持终端在线,如果电脑休眠了任务就直接被杀死了这时候我们可以用来执行命令,就会在后台自动执行 nohup 命令 &...

git忽略上传配置文件

在使用git上传代码到github的时候,通常我们使用的编辑器(比如phpstorm等)会产生一些配置文件(.idea等),或者一些项目的配置信息,比如数据库信息;我们是不希望提交这些文件的;所以要用...

xshell做端口映射链接数据库

xshell做端口映射链接数据库

有些时候,公司的一些线上的数据库,数据太多,不适合复制到本地然后搭建本地数据库开发,直接链接数据库又不安全所以,需要通过xshell做端口转发,通过隧道来链接数据库1、首先通过xshell登陆跳板机2...

实现SVN自动化部署

实现SVN自动化部署

当我们修改程序并通过SVN上传到服务器后,我们想立马刷新页面看到更改之后的效果,这时候就要用到SVN自动化部署了,所谓的自动化部署,就是当SVN提交后自动更新文件到项目目录现在我们从头来部署一遍,看到...

安装完宝塔后shadowsocks不能使用

安装完宝塔后shadowsocks不能使用

问题描述:近期买了个搬瓦工的服务器,配置了shadowsocks,可是FQ访问Google,速度还不错(看1080p视频还是可以的),然后想着安装宝塔来管理服务器,便于以后部署网站什么的,当安装完宝塔...

git常用命令

太简单的clone,push ,pull就不说了,每天都用的没必要总结git放弃本地更改,强制拉取远程更新git fetch --all git reset -...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。