2012-09-10 58 views
0

給定一個日期,說2013年3月24日,我想把它轉換結束的那一天,在美國/太平洋時區。有沒有辦法確定該地區當日的時區是PST還是PDT?順便說一句,我正在使用Java。如何在夏令時的時區選擇結束日期?

我懷疑有沒有辦法做到這一點(至少在沒有地方查詢一些數據庫時,時區轉換將要發生的都知道),但認爲我會檢查。

回答

0

Java的日曆會處理,對於你,有沒有必要嘗試自己整理出來的時區。

DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
Date dateInServerTZ = format.parse("2013-03-24"); 
Calendar calInServerTZ = Calendar.getInstance(); 
calInServerTZ.setTime(dateInServerTZ); 
Calendar calInPST = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")); 
calInPST.set(Calendar.YEAR, calInServerTZ.get(Calendar.YEAR)); 
calInPST.set(Calendar.DAY_OF_YEAR, calInServerTZ.get(Calendar.DAY_OF_YEAR)); 
calInPST.set(Calendar.HOUR_OF_DAY, 23); 
calInPST.set(Calendar.MINUTE, 59); 
calInPST.set(Calendar.SECOND, 59); 
calInPST.set(Calendar.MILLISECOND, 999); 
Date endOfDayPST = calInPST.getTime(); 

可以消除一步步解析成PST,但我覺得這個例子使得它更清楚發生了什麼事在服務器時間和用戶時間之間的關係。

這顯然是更有效:

DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
format.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); 
Date dateInPST = format.parse("2013-03-24"); 
Calendar calInPST = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")); 
calInPST.setTime(dateInPST); 
calInPST.set(Calendar.HOUR_OF_DAY, 23); 
calInPST.set(Calendar.MINUTE, 59); 
calInPST.set(Calendar.SECOND, 59); 
calInPST.set(Calendar.MILLISECOND, 999);