世代不止是个日子

机械表 1

toilet

前天调控服务器缓存成效代码时为便于处理时间戳,存款和储蓄时将日期时间转为秒数的整数格式,使用的编制程序语言是
Ruby 当时并不知底那种存款和储蓄方式是 Unix 世界曾经通用的时光格式。

其后多少运营同事查看缓存表明文书档案时,反问时间戳的平头格式是或不是从格林尼治时间算起?鬼知道
Time.now.to_i
是怎么算的,走心的疑忌还有其余计量情势吗?无知的反问语里竟揭破着焉敢猜疑的锋利,久久不知如何分解。

Time#to_i

Returns the value of time as an integer number of seconds since the
Epoch.

API 解释为从 Epoch 算起的总秒数,望着不熟悉的 Epoch
误以为是个专闻明称,但英文再差依旧有份自信它怎么也不会音译为格林尼治。

Epoch 时期; 纪元; 世; 新时代;

Epoch Time 指1个一定的光阴:一九6七-0一-01 00:00:00 UTC。

UTC 又是怎么?

协调世界时(英:Coordinated Universal Time ,法:Temps Universel
Coordonné),又称世界统一时间,世界标准时间,国际协调时间。英文(CUT)和法文(TUC)的缩写分裂,作为迁就,简称UTC。

UTC
时间是以原龙时秒长为根基,在时刻上竭尽接近于世界时的一种时光总括连串,是新的正儿八经时间。

新的正规时间?那旧标准时间的有那么些?原来正是格林尼治时间。

格林尼治标准时间(格林wich Mean
提姆e,丙胺搏来霉素T)是指位于英帝国London青阳县的皇室格林尼治天文台的专业时间,本初子午线被定义为通过那里的经线。

由于地球每一日的自转某些格外,而且正在缓慢减速,因而,格林尼治时间已不复被作为标准时间使用。新的正统时间,是由原子钟报时的协调世界时(UTC)。

知情了 GMT/UTC 的科班时间方案更替的承袭关系,那 一96七年产生了哪些,以至于 Unix 系统以它作 “纪元”。

原来 Unix 正是在越发时代产生的,一玖陆八 年通告的雏形,最早是依照硬件 60Hz
的光阴计数。

一9七四年初出版的《Unix Programmer’s 马努al》里定义的 Unix Time 是以
壹玖七2年11月1日00:00:00 作为开局时间,每秒增进 60。思量到 三贰11个人整数的限量,假设每秒 56个数字,则两年半就会循环一轮,于是改成以秒为计数单位。循环周期有13陆年之长,就不在乎初步时间是
196玖 依然 壹九柒一 年,遂改成人工记念、总结比较有利的一九陆陆年。

看起来很乱的定义此时清楚许多,Unix 的社会风气开启了 “纪元”,Unix
时间戳也就成为了叁个专盛名称。

Unix 时间戳是1种时光表示方法,定义为从格林尼治时间 一九七零年011月0十七日00时00分00秒 起至将来的总秒数,不思索闰秒。

Unix 时间戳的英文称呼列表:

  • POSIX time
  • Epoch time
  • Unix epoch
  • Unix time
  • Unix timestamp

克拉霉素T/UTC 是两套时间标准;1967 年是 Unix
系统诞生的年份里易于人工记念的年份;一玖陆八 年作为 Unix
系统历史长河中里程碑式的一年,正式开启了 Unix 世界的 “纪元”,番邦称
Epoch。

UTC 本质强调的是比 核糖霉素T 更为纯粹的世界时间标准,不过对此开拓者来说,欧霉素T
与 UTC 的效用与精确度是不曾差其他。

HTTP 响应头中的日期就是利用旧款的 GMT 标准时间:

curl -I jianshu.com
HTTP/1.1 301 Moved Permanently
Server: Tengine
Date: Mon, 12 Dec 2016 14:29:05 GMT
Content-Type: text/html
Content-Length: 278
Connection: keep-alive
Location: http://www.jianshu.com/

MySQL

MySQL 不止是平静好用存款和储蓄数据的库,更是一套超强的工具集,生成与反解 Unix
时间戳的操作也只是一条命令的实施。

mysql> select unix_timestamp();
+------------------+
| unix_timestamp() |
+------------------+
|       1481545686 |
+------------------+
1 row in set (0.01 sec)

mysql> select from_unixtime(1481545686);
+---------------------------+
| from_unixtime(1481545686) |
+---------------------------+
| 2016-12-12 20:28:06       |
+---------------------------+
1 row in set (0.01 sec)

感兴趣的能够查询一下那五个函数,用法万分灵活,以便须求时脑中多一套消除思路,莫要有事没事就写剧本。

生长在天朝,配置数据库时除了普通话编码外就是岁月的装置,那么什么样查看当前数据库是不是按计划的时区在运作吧?

$ cat /ect/my.cnf
[mysqld]
default_time_zone='+08:00'

mysql> select timediff(now(), utc_timestamp) as date_area;
+-----------+
| date_area |
+-----------+
| 08:00:00  |
+-----------+
1 row in set (0.00 sec)

mysql> select utc_timestamp();
+---------------------+
| utc_timestamp()     |
+---------------------+
| 2016-12-12 13:51:15 |
+---------------------+
1 row in set (0.00 sec)

mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2016-12-12 21:50:38 |
+---------------------+
1 row in set (0.00 sec)

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2016-12-12 21:50:49 |
+---------------------+
1 row in set (0.00 sec)

MySQL# UTC_TIMESTAMP

Returns the current UTC date and time as a value in ‘YYYY-MM-DD
HH:MM:SS’ or YYYYMMDDHHMMSS format, depending on whether the function
is used in a string or numeric context.

UTC 标准时间按钦点的格式突显,那么还有别的的来得格式?查询 API
果然无规矩不成方圆,发现真有个函数能够取得分裂标准时间的呈现格式,自个儿过分肤浅,那才意示到完美的工具中不管显示的时日格式都以各有出处。

mysql> select get_format(datetime,'iso') as iso;
+-------------------+
| iso               |
+-------------------+
| %Y-%m-%d %H:%i:%s |
+-------------------+
1 row in set (0.01 sec)

来得格式的专业不多,贴一下放权力当备忘:

Function Call Result
GET_FORMAT(DATE,’USA’) ‘%m.%d.%Y’
GET_FORMAT(DATE,’JIS’) ‘%Y-%m-%d’
GET_FORMAT(DATE,’ISO’) ‘%Y-%m-%d’
GET_FORMAT(DATE,’EUR’) ‘%d.%m.%Y’
GET_FORMAT(DATE,’INTERNAL’) ‘%Y%m%d’
GET_FORMAT(DATETIME,’USA’) ‘%Y-%m-%d %H.%i.%s’
GET_FORMAT(DATETIME,’JIS’) ‘%Y-%m-%d %H:%i:%s’
GET_FORMAT(DATETIME,’ISO’) ‘%Y-%m-%d %H:%i:%s’
GET_FORMAT(DATETIME,’EUR’) ‘%Y-%m-%d %H.%i.%s’
GET_FORMAT(DATETIME,’INTERNAL’) ‘%Y%m%d%H%i%s’
GET_FORMAT(TIME,’USA’) ‘%h:%i:%s %p’
GET_FORMAT(TIME,’JIS’) ‘%H:%i:%s’
GET_FORMAT(TIME,’ISO’) ‘%H:%i:%s’
GET_FORMAT(TIME,’EUR’) ‘%H.%i.%s’
GET_FORMAT(TIME,’INTERNAL’) ‘%H%i%s’

Terminal

若在数据库中操作,使用上述函数已经能够随手生成、解析 Unix
时间戳,若未在数据库中操作,难不成为查看 Unix
时间戳还要再登陆数据库?展开命令终端,也是1个限令分秒间释然的作业。

$ uname -s
Darwin
$ date +%s
1481546766
$ date -r 1481546766
2016年12月12日 星期一 20时46分06秒 CST

$ cat /etc/redhat-release
CentOS release 6.5 (Final)
$ date +%s
1481546890
$ date -d @1481546890
2016年 12月 12日 星期一 20:48:10 CST

$ irb
irb(main):001:0> t = Time.now.to_i
=> 1481547158
irb(main):002:0> Time.at(t)
=> 2016-12-12 20:52:38 +0800

> window.userAgent
< "mozilla/5.0 (macintosh; intel mac os x 10_10_5) applewebkit/601.7.7 (khtml, like gecko) version/9.1.2 safari/601.7.7"
> var t = Math.round(new Date().getTime() / 1000)
< undefined
> t
< 1481601053
> new Date(t * 1000)
< Tue Dec 13 2016 11:50:53 GMT+0800 (CST) 

CST 又是哪些时间标准?CST
可身为美利坚联邦合众国、澳国、古巴或中夏族民共和国的正规时间,可为如下 伍个分歧时区的缩写:

  • 古巴正规时间:Cuba Standard Time UT-四:00
  • 中中原人民共和国专业时间:China Standard Time UT+八:00
  • 米利坚中段时间:Central Standard Time (USA) UT-6:00
  • 澳洲当中时间:Central Standard Time (Australia) UT+玖:30

简言之寻找资料未找到 CST 存在的含义,仅仅是上述几行文字的分解。TODO: CST
产生的缘故

参照列表中
百科:Unix时间戳
值得轻便阅读,内有彩蛋。

别的专业时间

CET(Central European
提姆e,CET)北美洲中段时间是比世界标准时间(UTC)早三个钟头的时区名称之一。

它被当先5/10亚洲国度和一些北非国家选取。

冬日时间为 UTC + 一,清夏欧洲夏令时为 UTC + 2。

机械表,DST (Daylight Saving
Time)夏季节省时间,指在夏天太阳升起的可比早时,将机械钟拨快1钟头,以超前几天光的选用,在United Kingdom则称为夏令时间(SummerTime)。

其一构想于 1784年由美利坚同盟国班杰明·Franklin建议来,壹玖一3年德意志改为第一个专业进行夏令日光节约时间的国度,以缩减灯光照明和功耗开销。自此以往,满世界以澳大塔尔萨和北美为主的约
70 个国家都引用了这几个套方案。

澳洲手提式有线电话机上也有诸多 GSM
系统的集散地台,除了会传递本地时间外也包罗夏令日光节约时间,做为手提式有线电话机的时日标准,使用者能够自行决定开启或关闭。

值得注意的是,有个别国家有实行「夏季节约时间」的社会制度,出国时别忘了跟随本地习惯在表上调节一下,那不过机械表未有的功能设计!

各专业时间的总括

  • UTC = GMT
  • CET = UTC/GMT + 1
  • CST = UTC/GMT + 8
  • CST = CET + 9

参考

相关文章