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

薄洪涛7年前Linux1367

事情是这样的,我最近做一套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 , 然后解析的时候,获取现在的时间戳,做差判断就好了;


相关文章

Nginx如何获取get/post传递的参数?

有一些业务场景,需要我们用nginx做url的重写,这样的话我们就需要做参数的拼接,比如我们想把xxx.com/a/1/2 重写成yyy.com/b?a=1&b=2,就需要做参数的拼接;假如我...

nginx正向代理与反向代理

nginx正向代理与反向代理

正向代理正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。浏览器中输...

负载均衡配置ssl证书的坑

负载均衡配置ssl证书的坑

上周的时候,公司有个域名需要配置下ssl证书,所以这个艰巨的任务落在我的头上,开始的时候,觉得没啥啊,就配个证书而已,分分钟的事儿于是开始配置了步骤如下:合并证书文件负载均衡器导入ssl证书,配置ac...

DNS解析的流程

DNS解析的流程

最近在做DNS解析方面的事情,今天正好整理一下DNS解析的过程先说下什么叫DNS解析;简单来说,就是每台服务器都有自己的IP地址,比如我想上百度网,我会在浏览器中输入http://119.75.217...

搭建SSH反向隧道

搭建SSH反向隧道

公司的数据库是通过端口转发来连接的,即需要ssh登录跳板机,然后通过隧道-端口转发,将数据库映射到跳板机(或者电脑本地)的某个端口,程序连接本地的端口就可以实现连接远程对的数据库;这种连接方式相比VP...

Centos7 下开机自启

我在虚拟机上搭建了一套nginx+php,然后每次开机的时候,都要去手动去运行让服务起来,这我可忍不了了,毕竟我可是懒癌晚期废话少说,我们直接设置开机启动1.在系统目录创建服务文件(不要问为什么,li...

发表评论    

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