閱讀306 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java Date Time 教程-System.currentTimeMillis()

靜態方法System.currentTimeMillis() 返回從1970年1月1日到現在的總毫秒數。返回類型為long。下麵是一個例子:

long timeNow = System.currentTimeMillis();


實際上要做的就隻有這麼多了。返回long類型的值可以用於初始化java.util.Date,java.sql.Date、java.sql.Timestamp和java.util.GregorianCalendar對象。

時間粒度

System.currentTimeMillis() 方法的粒度大於1毫秒。如果你重複地調用該方法,在一段時間內你會看到你獲取到的都是相同的值,然後突然一下子跳了10/20/30毫秒甚至更多。該方法不是全世界最準確的或者細粒度的計時器。

(譯者注:關於時間戳為什麼是自1970年1月1日開始的?摘錄知乎的兩個回答如下(原文地址):

仲晨:因為Unix就是那個時代產生的。Unix是1969年發布的雛形,最早是基於硬件60Hz的時間計數。1971年底出版的《Unix Programmer’s Manual》裏定義的Unix Time是以1971年1月1日00:00:00作為起始時間,每秒增長60。之後考慮到32位整數的範圍,如果每秒60個數字,則兩年半就會循環一輪了。於是改成了以秒為計數單位。這個循環周期有136年之長,就不在乎起始時間是1970還是1971年了,於是就改成了人工記憶、計算比較方便的1970年了。

許铖:我來補充問題的後半截。因為unix時間戳是一個有符號整數,所以1970年前一百年可以用其負數部分表示。但事實上很少這要使用。因為unix時間戳主要用來表示當前時間或者和電腦有關的日誌時間(如文件創立時間,log發生時間等)。考慮到所有電腦文件不可能在1970年前創立,所以用unix時間戳很少用來表示1970前的時間。當需要表示以前的時間,一般就是自己定義數據結構。比如你可以用幾個數分別表示年月日,或者像excel中用1900年1月1日後的天數表示時間。)

(全文完)

最後更新:2017-05-22 15:32:52

  上一篇:go  單身狗慎入,程序員的情侶裝穿搭指南
  下一篇:go  實錄 | 蘋果庫克對話清華經管院長錢穎一:矽穀該多向中國學習