java2平臺爲咱們提供了豐富的日期時間API。如java.util.Date;java.util.calendar;java.text.DateFormat等。那麼它們之間有什麼關係呢?java
首先,java.util.Date表明一個時間點,其值爲距公元1970年1月1日 00:00:00的毫秒數。因此它是沒有時區和Locale概念的。java經過以下形式取得當前時間點:數據庫
Date now = new Date(); //這個時間點與本地系統的時區無關工具
而 正由於其與時區的無關性,才使得咱們的存儲數據(時間)是一致的(時區一致性)。通常的咱們將now存儲於數據庫中,當咱們須要展示數據時,將 now格式化成想要的格式,如:2011-11-19 14:12:23。而這個功能通常交由java.text.DateFormat來實現。例如:spa
SimpleDateFormat sdf =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String snow = sdf.format(now); // 2011-11-19 14:12:23
咱們發現snow是帶時間(14:12:23)的字符串,咱們不由要問,該時間(14:12:23)是哪一個時區的時間?默認狀況 下,SimpleDateFormat 取得本地系統的時區(個人時區爲GMT+8北京),而後按照pattern("yyyy-MM-dd HH:mm:ss")格式化now,此時輸出的就是GMT+8區的時間了。若是想支持國際化時間,則先指定時區,而後再格式化date數據。例如:code
SimpleDateFormat sdf =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
String snow = sdf.format(now); // 2011-11-19 14:12:23
另外,你能夠經過以下代碼修改本地時區信息:orm
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
java.util.Calendar類也表明時間點,但它爲Date的facade工具類,提供了不少對時間點到年、月、日、時、分、秒、星期等的轉換(計算)的方便方法。blog
Calendar calendar = Calendar.getInstance(timezone);
Date d = calendar.getTime();
Calendar 的計算也是基於時區的,例如:同一個date在不一樣時區下的小時數是不同的。可是calendar.getTime();返回的date是沒有時區的,由於它是Date類型的。例如:字符串
public static void main(String[] args) throws InterruptedException {
Calendar calendar1 = Calendar
.getInstance(TimeZone.getTimeZone("GMT+8"));
Calendar calendar2 = Calendar
.getInstance(TimeZone.getTimeZone("GMT+1"));
System.out.println("Millis = " + calendar1.getTimeInMillis());
System.out.println("Millis = " + calendar2.getTimeInMillis());
System.out.println("hour = " + calendar1.get(Calendar.HOUR));
System.out.println("hour = " + calendar2.get(Calendar.HOUR));
System.out.println("date = " + calendar1.getTime());
System.out.println("date = " + calendar2.getTime());
}
輸出:get
Millis = 1358614681203 Millis = 1358614681203 hour = 3 hour = 8 date = Thu Nov 19 15:11:21 CST 2011 date = Thu Nov 19 15:11:21 CST 2011