在WIN7下发现一些Java的程序获取系统时间比真实时间差了8个小时,怀疑是Java程序沿用了低版本的JDK,获取时间时取的GSM 0时区,而中国是GSM +8,所以查了8个小时,解决办法如下:
修改如下:
Date d = new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd kk:mm:ss ");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
System.out.println(sdf.format(d));
或
Calendar now = Calendar.getInstance();
// 获取中国北京时区
TimeZone tz = TimeZone.getTimeZone("CCT");//写法1,简写
tz=TimeZone.getTimeZone("Asia/Shanghai");//写法2,a full name such as"America/Los_Angeles"
tz=TimeZone.getTimeZone("GMT+08:00");//写法3,custom ID such as "GMT-8:00"
now.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));//important
或:
now.setTimeZone();
System.out.println(now.get(Calendar.HOUR_OF_DAY));
System.out.println(now.get(Calendar.MINUTE));
System.out.println(now.get(Calendar.SECOND));
这样就可以了。
关键就是设置TimeZone: TimeZone.getTimeZone("Asia/Shanghai")
http://wmljava.iteye.com/blog/1236906
API:
public static TimeZone getTimeZone(String ID)
- Gets the
TimeZone
for the given ID. -
-
- Parameters:
-
ID
- the ID for aTimeZone
, either an abbreviation such as "PST", a full name such as "America/Los_Angeles", or a custom ID such as "GMT-8:00". Note that the support of abbreviations is for JDK 1.1.x compatibility only and full names should be used. - Returns:
- the specified
TimeZone
, or the GMT zone if the given ID cannot be understood.
时区简写对照表:
标准时间代码 |
与GMT的偏移量 |
描述 |
NZDT |
+13:00 |
新西兰夏令时 |
IDLE |
+12:00 |
国际日期变更线,东边 |
NZST |
+12:00 |
新西兰标准时间 |
NZT |
+12:00 |
新西兰时间 |
AESST |
+11:00 |
澳大利亚东部夏时制 |
CST(ACSST) |
+10:30 |
中澳大利亚标准时间 |
CADT |
+10:30 |
中澳大利亚夏时制 |
SADT |
+10:30 |
南澳大利亚夏时制 |
EST(EAST) |
+10:00 |
东澳大利亚标准时间 |
GST |
+10:00 |
关岛标准时间 |
LIGT |
+10:00 |
澳大利亚墨尔本时间 |
CAST |
+9:30 |
中澳大利亚标准时间 |
SAT(SAST) |
+9:30 |
南澳大利亚标准时间 |
WDT(AWSST) |
+9:00 |
澳大利亚西部标准夏令时 |
JST |
+9:00 |
日本标准时间,(USSR Zone 8) |
KST |
+9:00 |
韩国标准时间 |
MT |
+8:30 |
毛里求斯时间 |
WST(AWST) |
+8:00 |
澳大利亚西部标准时间 |
CCT |
+8:00 |
中国沿海时间(北京时间) |
JT |
+7:30 |
爪哇时间 |
IT |
+3:30 |
伊朗时间 |
BT |
+3:00 |
巴格达时间 |
EETDST |
+3:00 |
东欧夏时制 |
CETDST |
+2:00 |
中欧夏时制 |
EET |
+2:00 |
东欧,(USSR Zone 1) |
FWT |
+2:00 |
法国冬时制 |
IST |
+2:00 |
以色列标准时间 |
MEST |
+2:00 |
中欧夏时制 |
METDST |
+2:00 |
中欧白昼时间 |
SST |
+2:00 |
瑞典夏时制 |
BST |
+1:00 |
英国夏时制 |
CET |
+1:00 |
中欧时间 |
DNT |
+1:00 |
Dansk Normal Tid |
FST |
+1:00 |
法国夏时制 |
MET |
+1:00 |
中欧时间 |
MEWT |
+1:00 |
中欧冬时制 |
MEZ |
+1:00 |
中欧时区 |
NOR |
+1:00 |
挪威标准时间 |
SET |
+1:00 |
Seychelles Time |
SWT |
+1:00 |
瑞典冬时制 |
WETDST |
+1:00 |
西欧光照利用时间(夏时制) |
GMT |
0:00 |
格林威治标准时间 |
WET |
0:00 |
西欧 |
WAT |
-1:00 |
西非时间 |
NDT |
-2:30 |
纽芬兰(新大陆)白昼时间 |
ADT |
-03:00 |
大西洋白昼时间 |
NFT |
-3:30 |
纽芬兰(新大陆)标准时间 |
NST |
-3:30 |
纽芬兰(新大陆)标准时间 |
AST |
-4:00 |
大西洋标准时间(加拿大) |
EDT |
-4:00 |
(美国)东部夏令时 |
CDT |
-5:00 |
(美国)中部夏令时 |
EST |
-5:00 |
(美国)东部标准时间 |
CST |
-6:00 |
(美国)中部标准时间 |
MDT |
-6:00 |
(美国)山地夏令时 |
MST |
-7:00 |
(美国)山地标准时间 |
PDT |
-7:00 |
(美国)太平洋夏令时 |
PST |
-8:00 |
(美国)太平洋标准时间 |
YDT |
-8:00 |
Yukon夏令时 |
HDT |
-9:00 |
夏威仪/阿拉斯加白昼时间 |
YST |
-9:00 |
Yukon标准时 |
AHST |
-10:00 |
夏威仪-阿拉斯加标准时间 |
CAT |
-10:00 |
中阿拉斯加时间 |
NT |
-11:00 |
州时间(Nome Time) |
IDLW |
-12:00 |
国际日期变更线,西边 |
timeZone可使用的参数:
America/Belize CST *标准时间
America/Cancun CST *标准时间
America/Chicago CST *标准时间
America/Costa_Rica CST *标准时间
America/El_Salvador CST *标准时间
America/Guatemala CST *标准时间
America/Indiana/Knox CST *标准时间
America/Indiana/Tell_City CST *标准时间
America/Knox_IN CST *标准时间
America/Managua CST *标准时间
America/Menominee CST *标准时间
America/Merida CST *标准时间
America/Mexico_City CST *标准时间
America/Monterrey CST *标准时间
America/North_Dakota/Center CST *标准时间
America/North_Dakota/New_Salem CST *标准时间
America/Rainy_River CST *标准时间
America/Rankin_Inlet CST *标准时间
America/Regina CST *标准时间
America/Swift_Current CST *标准时间
America/Tegucigalpa CST *标准时间
America/Winnipeg CST *标准时间
CST CST *标准时间
CST6CDT CST *标准时间
Canada/Central CST *标准时间
Canada/East-Saskatchewan CST *标准时间
Canada/Saskatchewan CST *标准时间
Mexico/General CST *标准时间
SystemV/CST6 CST *标准时间
SystemV/CST6CDT CST *标准时间
US/Central CST *标准时间
US/Indiana-Starke CST *标准时间
America/Havana CST Cuba Standard Time
Cuba CST Cuba Standard Time
Asia/Chongqing CST 中国标准时间
Asia/Chungking CST 中国标准时间
Asia/Harbin CST 中国标准时间
Asia/Kashgar CST 中国标准时间
Asia/Macao CST 中国标准时间
Asia/Macau CST 中国标准时间
Asia/Shanghai CST 中国标准时间
Asia/Taipei CST 中国标准时间
Asia/Urumqi CST 中国标准时间
CTT CST 中国标准时间
PRC CST 中国标准时间
ACT CST *标准时间(北领地)
Australia/Adelaide CST *标准时间(南澳大利亚)
Australia/Broken_Hill CST *标准时间(南澳大利亚/新南威尔斯)
Australia/Darwin CST *标准时间(北领地)
Australia/North CST *标准时间(北领地)
Australia/South CST *标准时间(南澳大利亚)
Australia/Yancowinna CST *标准时间(南澳大利亚/新南威尔斯)