《日子》.JAVA基礎篇章.日期時間

基本概念

時區(qū) :time zone 1884年國際經線會議規(guī)定,全球按經度分為24個時區(qū),每區(qū)各占經度15°。

以本初子午線為中央經線的時區(qū)為零時區(qū),由零時區(qū)向東、西各分12區(qū),東、西12區(qū)都是半時區(qū),共同使用180°經線的地方時。

CST :China Standard Time UTC+8:00 中國標準時間(北京時間),在東八區(qū)

UTC :Universal Time Coordinated,世界協(xié)調時間,又稱世界標準時間、世界統(tǒng)一時間。UTC 提供了一種與時區(qū)無關(或非特定于時區(qū))的時間。

世界上的所有時區(qū)都可以表示為 UTC 加上或減去一個偏移量。

因此,UTC是0時區(qū)的時間,如北京為早上八點(東八區(qū)),UTC時間就為零點,時間比北京時晚八小時

GMT :Greenwich Mean Time格林威治標準時間,指位于英國倫敦郊區(qū)的皇家格林尼治天文臺的標準時間,因為本初子午線被定義在通過那里的經線。

Unix timestamp :Unix時間戳,或稱Unix時間(Unix time)、POSIX時間(POSIX time),是一種時間表示方式,

定義為從格林威治時間(UTC/GMT的午夜)1970年01月01日00時00分00秒起至現(xiàn)在的總秒數(shù)。

可以這么說:

UTC和GMT幾乎是同一概念,兩者的區(qū)別是GMT是一個天文上的概念,UTC是基于原子鐘。

GMT=UTC

GMT + 8 = UTC + 8 = CST

UTC+時間差=本地時間 (時間差東為正,西為負,東八區(qū)記為 +0800)

總結

System.currentTimeMillis():可以提取到當前時間的毫秒數(shù),產生一個當前的毫秒,這個毫秒其實就是自1970年1月1日0時起的毫秒數(shù)。等同于new Date().getTime() ?

java.util.Date代表一個時間點,其值為距公元1970年1月1日 00:00:00的毫秒數(shù)。所以它是沒有時區(qū)和Locale概念的。java通過如下形式取得當前時間點:Date now = new Date();? //這個時間點與本地系統(tǒng)的時區(qū)無關

而正因為其與時區(qū)的無關性,才使得我們的存儲數(shù)據(jù)(時間)是一致的(時區(qū)一致性)。

一般的我們將now存儲于數(shù)據(jù)庫中,當我們需要展現(xiàn)數(shù)據(jù)時,將now格式化成想要的格式,如:2015-04-13 21:22:24

而這個功能一般交由java.text.DateFormat來實現(xiàn)。例如:

1SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");

2String snow = sdf.format(now);

如果想支持國際化時間,則先指定時區(qū),然后再格式化date數(shù)據(jù)。例如:

SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");

2sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));

3String snow = sdf.format(now);// snow = 2015-04-04 21:22:24

4sdf.setTimeZone(TimeZone.getTimeZone("GMT+7"));

5String snow2 = sdf.format(now);// snow2 = 2015-04-04 20:22:24 (可見:東八區(qū)比東七區(qū)早一個小時)

另外,你可以通過如下代碼修改本地時區(qū)信息:

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容