我們經常看到一個時間用long類型數據來表示,例如:1580704106823 表示當前時間:2020年02月03日12時28分26秒823毫秒
那麼爲什麼時間可以用一個long類型數據來表示呢?下面我們來一點點的分析:
首先,介紹一個概念,時間戳:
百度百科:時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總毫秒數
上述介紹已經把爲什麼可以用long類型表示一個時間了,下面我們開始去驗證這個是否正確
環境說明:咱們屬於中國,時間戳是從北京時間1970年01月01日08時00分00秒000毫秒開始計時的
將總毫秒數:1580704106823 進行逐一分解
long time = 1580704106823L;
- 計算總的秒數: 1580704106 秒
long seconds = time / 1000;
- 計算總的分鐘數:26345064 分鐘
long minutes = time/ (1000 * 60);
- 計算總的小時數:439084 小時
long hours = time / (1000 * 60 * 60);
- 計算總的天數:18295 天
long days = time / (1000 * 60 * 60 * 24);
現在我們還需要知道 1970 - 2019 年之間有多少個閏年?
編寫求一段時間內的閏年總數:
閏年定義:可以被 4 整除但不能被 100 整除,以及可以被 400 整除的年份
private static long getLeapYears(long start, long end) {
long count = 0;
for (long year = start; year <= end; year++) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
count++;
}
}
return count;
}
- 計算 1970-2019 之間的閏年數:12個
long leapYears = getLeapYears(1970, 2019);
現在我們來算一下
- 離 1970 年過去了多少年了:50年
(總的天數-閏年數)/ 365 = 時隔年數
long intervalYears = (days - leapYears) / 365;
上述 intervalYears = 50,表示離 1970 年已經過了 50 年了,正好驗證:2020 = 1970 + 50
- 除去年份干擾,算離2020年01月01日過去了多少天:33天
long intervalDays = days - (intervalYears * 365 + leapYears);
上述 intervalDays = 33,表示離2020年01月01日已經過了33天,正好驗證:01月01日 + 33 天 = 02月03日
- 除去天數干擾,算離2020年02月03日08時過去了多少小時:4時
long intervalHours = hours - days * 24;
上述 intervalHours = 4,表示離2020年02月03日08時已經過了4個小時,正好驗證:08時 + 4時 = 12時
- 除去小時干擾,算離2020年02月03日12時00分過去了多少分鐘:28分
long intervalMinutes = minutes - hours * 60;
上述 intervalMinutes = 24,表示離2020年02月03日08時00分過去了28分鐘,正好驗證:00分 + 28分 = 28分
- 除去分鐘干擾,算離2020年02月03日12時28分00秒過去了多少秒:26秒
long intervalSeconds = seconds - minutes * 60;
上述 intervalSeconds,表示離2020年02月03日12時28分00秒過去了26秒,正好驗證:00秒 + 26秒 = 26秒
- 除去秒數干擾,算離2020年02月03日12時28分26秒000毫秒過去了多少毫秒:823毫秒
long intervalMilliseconds = time - seconds * 1000;
上述 intervalMilliseconds,表示離2020年02月03日12時28分26秒000毫秒過去了823毫秒,正好驗證:000毫秒 + 823毫秒 = 823毫秒
經過上述的分析:我們明白了爲什麼一個時間可以用一個long類型存儲,long類型存儲的是1970年01月01日00秒000毫秒到現在的時間之間的間隔毫秒數
也就是:1970年01月01日00秒000毫秒 + 1580704106823毫秒 = 2020年02月03日12時28分26秒823毫秒