我正在使用此代码来解析此日期。它必须显示新日期为“2012-06-20 03:09:38”,因为EDT为-4GMT且我当前的位置是GMT + 5。但它没有显示它现在显示它是
private static void convertEDT_TO_GMT() {
try {
String s = "2012-06-20 18:09:38";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("EDT"));
Date timestamp = null;
timestamp = df.parse(s);
df.setTimeZone(TimeZone.getTimeZone("GMT+05:00"));
System.out.println("Old = " + s);
String parsed = df.format(timestamp);
System.out.println("New = " + parsed);
} catch (Exception e) {
e.printStackTrace();
}
}
显示
Old = 2012-06-20 18:09:38
新= 2012-06-20 23:09:38
答案 0 :(得分:7)
时区'EDT'不存在。做一个System.out.println()
的TimeZone.getTimeZone(“EDT”)表明它正在回归GMT,因为Java并不知道'EDT'是一个时区。
从"EDT"
更改为"GMT-04:00"
会得到正确的结果:
try {
String s = "2012-06-20 18:09:38";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//df.setTimeZone(TimeZone.getTimeZone("EDT"));
df.setTimeZone(TimeZone.getTimeZone("GMT-04:00"));
Date timestamp = null;
timestamp = df.parse(s);
df.setTimeZone(TimeZone.getTimeZone("GMT+05:00"));
System.out.println("Old = " + s);
String parsed = df.format(timestamp);
System.out.println("New = " + parsed);
} catch (Exception e) {
e.printStackTrace();
}
结果:
Old = 2012-06-20 18:09:38
New = 2012-06-21 03:09:38
根据this post:
东部夏令时不是“完整”时区的名称 - 它是时区的“一半”,实际上总是落后于UTC 4小时。
因此使用"GMT-04:00"
可能是正确的解决方案。
答案 1 :(得分:0)
TimeZone.setDefault(TimeZone.getTimeZone("GMT-04:00"));
Date date = new Date();
System.out.println("Current EDT Time is : "+date);