1. 程式人生 > >關於Date裡起始時間和時區的時差問題

關於Date裡起始時間和時區的時差問題

時間分為兩種,系統時間和本地時間,系統時間全世界的計算機都一樣,本地時間要計算時差。我們進行輸出時間之類的操作,都是輸出本地時間。但是我們new Date傳入引數,或者是進行其他與起始時間(1970年1月1日,0點0分0秒)相關的操作時,操作的時系統時間,輸出的確實本地時間。就會出現下面這種情況:

Date d=new Date(0);//在起始時間上加0毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s=sdf.format(d);
System.out.println(s);//結果為1970-01-01 08:00:00

可以發現起始時間時8點,是因為我們中國屬於東八區,有時差,我們可以通過SimpleDateFormat的父類DateFormat的方法setTimeZone()方法來設定時區,setTimeZone()接受一個TimeZone值,用來設定相應時區,TimeZone類又有一個getTimeZone()方法來獲取引數代表的時區。可以通過傳入不同引數來得到不同時區。

Date d=new Date(0);//在起始時間上加0毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
TimeZone zone = TimeZone.getTimeZone("GMT");//GMT是格林威治時間,也就是世界時
sdf.setTimeZone(zone);//設定時區
String s=sdf.format(d);
System.out.println(s);//輸出1970-01-01 00:00:00

系統時間其實就是按照格林威治時間算的,所以可以直接傳入"GTM"來調整時差 當然還可以傳入其他引數.

TimeZone.getTimeZone("Asia/Chongqing");//,亞洲重慶,時差8小時,輸出1970-01-01 08:00:00
TimeZone.getTimeZone("Asia/Tokyo");//亞洲日本,時差9小時,輸出1970-01-01 09:00:00
TimeZone.getTimeZone("GMT+1");//輸出1970-01-01 01:00:00,直接世界時上加一小時

除了上面幾種設定地區的方式,還有其他方