5

このコードを使用してこの日付を解析しています。EDTは-4GMTであり、現在の場所はGMT + 5であるため、新しい日付を「2012-06-2003:09:38」と表示する必要があります。しかし、これは表示されていませんが、現在はそのまま表示されています

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-2018:09:38

新規=2012-06-2023:09:38

4

2 に答える 2

9

タイムゾーン「EDT」は存在しません。` TimeZone.getTimeZone System.out.println()(" EDT ")を実行すると、Javaが「EDT」をタイムゾーンとして認識しないため、GMTにフォールバックしていることがわかります。

"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 に答える