時間戳分析(Java 版)

我們經常看到一個時間用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毫秒

 

發佈了99 篇原創文章 · 獲贊 28 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章