当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Linux/Unix关于时间和时间戳的命令行

    栏目:Linux/apache问题 时间:2019-11-21 21:38

    在日常开发中,长期是在从事后端服务器开发,也避免不了会经常和时间打交道,例如:

    玩家的首次登录时间玩家的最后登录时间活动的开启时间和结束时间

    而这些时间在程序中的表示就是用一个数字,我们把这个数字称为时间戳(Timestamp)。
    更多的情况下,我们是用一个整型数字来表示这个时间戳。

    每一个不同的整型数字都有不同的含义,他们都代表一个独一无二的时间,例如:

    0 : 代表 1970年的元旦节(1970.1.1 00:00:00 UTC) 60 : 代表 1970年元旦节刚过一分钟(1970.1.1 00:00:60 UTC) 3600 : 代表 1970年元旦节过去一个小时了(1970.1.1 01:00:00 UTC) 43200 : 代表 1970年元旦节午餐时间到了(1970.1.1 12:00:00 UTC) 86400 : 代表 1970年元旦节过完了(1970.1.2 00:00:00 UTC)

    结合上面的例子,对时间戳(Timestamp)的定义就清晰明了了,时间戳是一个数字,这个数字代表的是从1970年元旦节(1970.1.1 00:00:00)所经过(流逝)的秒数。

    明确了这个概念,如果我们再看到一个数字,并且知道它就是代表一个时间戳,那我们应该会迫不及待的想把它转换成它代表的时间。

    中话

    其实我只是想记录一下Linux/Unix系统下关于date命令行工具的使用指南,不料却回忆了一下关于时间戳的简要概念。

    事情的由来是,在很长一段时间内,我在拿到一个时间戳并且想看看这个时间戳究竟是具体的哪一天哪一年甚至于哪一分哪一秒的时候(通常在程序出现问题需要定位和时间有关的BUG的时候)。我都会习惯性的打开某搜索引擎然后输入时间戳这个关键词进行搜索,然后熟练的点击搜索结果的第一条Unix时间戳转换工具,直到某一天我觉得要纠正掉这个不好的习惯,我才开始试着去使用date这个Linux/Unix系统标配命令行工具去完成这个日常操作。哈哈,只能略表惭愧,我居然没有把这个这么好用的网站给收藏到浏览器的顶部栏!

    正题时间戳 -> 日期

    和往常一样,我在调试的过程中发现了一个可疑的时间戳,它的数值是1506787200,我需要知道这个时间戳是对应的哪个具体日期,所以我又熟练的打开了某搜索引擎输入了时间戳........

    其实我这次是打开了Mac系统终端(Terminal),然后输入了如下命令:

    date -r 1506787200
    

    这个命令以最快的速度也给予了我准确的反馈输出:

    从这一刻起,我感觉我自己终于摆脱了我的坏习惯,所以我觉得有必要多操作几次以达到强化的目的,于是我又熟练的依次输入了如下的命令:

    date -r 0
    date -r 60
    date -r 3600
    date -r 43200
    date -r 86400

    这些命令如饥似渴的以最快的速度分别的给予了我准确的反馈输出:

    从这一刻起,我感觉我自己已经熟练掌握了date -r的奥义,就在我欣喜如狂之际,我的旁光突然扫描到date -r 0这个命令的输出: 1970年 1月 1日 星期四 08时00分00秒 CST,为什么是早上8时,和我在前话中提到的0代表1970年1月1日0时0分0秒有些出入呢。

    其实这是一个误会,时间戳:0确实是代表1970年1月1日0时0分0秒,但是是代表零时区(UTC+0)的1970年1月1日0时0分0秒,还好我也是学过地理的,知道我们伟大的祖国幅员辽阔,地大物博,光时区就横跨了5个,而且全国统一使用首都北京所在时区东八区(UTC+8)的时间。

    因为我的电脑系统设置的时区是东八区的缘故,这个date