Java獲取指定時區的時間格式
阿新 • • 發佈:2018-11-19
示例
分享一個獲取指定時區的時間格式方法: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 國際日期變更線,東邊