1. 程式人生 > >時間戳Unix timestamp

時間戳Unix timestamp

二進制 aid select reader ike 軟件故障 line timestamp 轉換方法

(1)定義

Unix時間戳(Unix timestamp),或稱Unix時間(Unix time)、POSIX時間(POSIX time),是一種時間表示方式,定義為從格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。Unix時間戳不僅被使用在Unix 系統、類Unix系統中,也在許多其他操作系統中被廣泛采用。

目前相當一部分操作系統使用32位二進制數字表示時間。此類系統的Unix時間戳最多可以使用到格林威治時間2038年01月19日03時14分07秒(二進制:01111111 11111111 11111111 11111111)。其後一秒,二進制數字會變為10000000 00000000 00000000 00000000

,發生溢出錯誤,造成系統將時間誤解為1901年12月13日20時45分52秒。這很可能會引起軟件故障,甚至是系統癱瘓。使用64位二進制數字表示時間的系統(最多可以使用到格林威治時間292,277,026,596年12月04日15時30分08秒)則基本不會遇到這類溢出問題。

(2)10位與13位時間戳

a.產生

java的date默認精度是毫秒,也就是說生成的時間戳就是13位的,而像c++或者php生成的時間戳默認就是10位的,因為其精度是秒。

【1秒=1000毫秒,1毫秒=1000微秒】

b.轉換方法

第一種:通過substring方法,將13位的時間戳最後三位數字截取
第二種:將13位時間戳除以1000 -- 此方法更可取

HIVE/SPARK:

select unix_timestamp() -- 當前時間的時間戳,10位

select from_unixtime(1548654394172/1000) --時間精確到秒:2019-01-28 13:46:34

PRESTO:

select to_unixtime(current_timestamp) -- 當前時間的時間戳,長度14位(包含小數點)

select from_unixtime(1548654394172/1000) --時間會精確到毫秒:2019-01-28 13:46:34.000

參考鏈接:

什麽是時間戳:http://www.cnblogs.com/yangqi/archive/2010/07/16/1778675.html

UNIX時間戳:https://baike.baidu.com/item/unix%E6%97%B6%E9%97%B4%E6%88%B3/2078227

時間戳Unix timestamp