5

我正在使用此代码来解析此日期。它必须将新日期显示为“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();
    }
    }

它显示

旧 = 2012-06-20 18:09:38

新 = 2012-06-20 23:09:38

4

2 回答 2

9

时区“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

根据这篇文章

东部夏令时间不是“完整”时区的名称 - 它是“半”时区,实际上总是比 UTC 晚 4 小时。

所以使用"GMT-04:00"可能是正确的解决方案。

于 2012-06-20T23:13:27.493 回答
1
TimeZone.setDefault(TimeZone.getTimeZone("GMT-04:00"));
Date date = new Date();
System.out.println("Current EDT Time is : "+date);
于 2017-07-27T07:23:11.883 回答