1. 程式人生 > >Java獲取指定時區的時間格式

Java獲取指定時區的時間格式

示例

分享一個獲取指定時區的時間格式方法:timeZoneOffset指定為8,獲取東8區的時間,timeZoneOffset指定為-5,獲取西5區的時間。

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SimpleTimeZone;
import java.util.TimeZone;

public class TimeZoneTest {
    public static String getFormatedDateString(int timeZoneOffset)
{ if (timeZoneOffset > 14 || timeZoneOffset < -12) { System.out.println("Configuration item TimeZone " + timeZoneOffset + " is invalid."); timeZoneOffset = 0; } TimeZone timeZone; String[] ids = TimeZone.getAvailableIDs(timeZoneOffset * 60
* 60 * 1000); if (ids.length == 0) { // Use default TimeZone timeZone = TimeZone.getDefault(); } else { timeZone = new SimpleTimeZone(timeZoneOffset * 60 * 60 * 1000, ids[0]); } SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"
); simpleDateFormat.setTimeZone(timeZone); return simpleDateFormat.format(new Date()); } public static void main(String[] args) { String test = getFormatedDateString(8); System.out.println(test); System.out.println(getFormatedDateString(-5)); } }

問題

時區名

同一個時區存在多個不同的國家、城市,不同城市會用不同的夏令時時間,所以上面的示例只是獲取時區ID列表的第一個代表,可能出現夏令時錯誤。更精確的方式是指定精確的時區名。比如:悉尼和布里斯班,都是東10區,但是悉尼實行夏令時,所以夏天的時候,悉尼要比布里斯班早1小時。

TimeZone timeZoneSYD = TimeZone.getTimeZone("Australia/Sydney");
TimeZone timeZoneBNE = TimeZone.getTimeZone("Australia/Brisbane");

時區精度

上述例子中整數表示時區,大部分情況下是沒有問題的,有些地區時區是存在半點時區。比如:GMT+05:30 印度標準時間(Indian Standard Time 縮寫IST)

參考時區

KLT +14:00 吉里巴斯線島時間
NZDT +13:00 紐西蘭夏時制
IDLW +12:00 國際日期變更線,西邊
NZST +12:00 紐西蘭標準時間
NZT +12:00 紐西蘭時間

CCT +08:00 中國北京時間(俄羅斯伊爾庫茨克時區)
WST +08:00 西澳大利亞標準時間

GMT 0:00 格林尼治標準時間
UT +00:00 全球時間
UTC +00:00 校準的全球時間

EDT -04:00 東部夏時制
CDT -05:00 中部夏時制
EST -05:00 東部標準時間
CST -06:00 中部標準時間

CAT -10:00 中阿拉斯加時間
NT -11:00 阿拉斯加諾姆時間
IDLE -12:00 國際日期變更線,東邊