关于unix时间戳

unix时间戳在开发中经常使用,前段时间开发的时候需要从一个时间戳中获取小时数,即时间戳1404965472,代表时间2014年7月10日12时11分12秒,我要获取12时中的12,以便做一些时间段的统计功能。后面去简单查看了下unix时间戳的知识,记录在这里。

Unix时间戳(Unix time),也叫POSIX time、Epoch time,是一套描述时间的体系,表示自1970年1月1日 00:00:00以来流逝的秒数(未计入leap seconds--用于校正时间的秒数)。1970年这个参考值时间是基于UTC(世界标准时)的,UTC是国际电信联盟制定的一套国际标准,用于统一世界各地的时间表示,关于其诞生的历史,感兴趣的同学可以去参看其wiki页面。之所以叫unix时间戳,是因为该体系被unix和类unix系统广泛采用。

既然unix时间戳代表的是秒数,那么开篇提到获取小时数的需求就迎刃而解了,使用下面的方法即可:

timestamp/3600%24

将开篇提到的1404965472代入上面公式得到4,与期待的12并不相符。问题出在哪里?问题出在时区上,北京是东八区,时间比零时区早8小时,所以4+8=12,问题解决!


日期格式

UTC的wiki里面有提到[ISO 8601[3,这是一个日期时间交换格式的国际标准。之所以对这个感兴趣,是因为在研究elasticsearch的date格式时,其文档中的时间格式都是类似2013-03-03T12:12:12Z,一直对这个T和Z感觉莫名其妙,还以为是elastisearch自己定义的格式。而在ISO 8601这个标准找到了答案。当将date和time在一起表示时,需要在中间加一个T,即Time。而Z代表了Zone,即时区,后面加上Z表示是零时区的时间,要表示其他时区的时间,比如东八区的时间,可以用2013-03-03T12:12:12-0800表示,也就是在时间的后面加上+/-hh:mm来表示时间差,+表示时间早,-表示时间晚,比如官方的例子中,下面的时间是相同的:

"18:30Z", "22:30+04", "1130−0700", and "15:00−03:30"

ISO 8601这个标准中还有时间间隔、重复等的表示方法,感兴趣的可以自己去看wiki。

就简单记录这些吧,去看《绣春图》了!@@

参考资料

  1. Unix timestamp
  2. UTC(Coordinated Universal Time)
  3. ISO 8601

标签: none

添加新评论