10

時間を CST から現地時間に変換getTimeZoneしていますが、正しく機能していないようです。

    String cstTime = "2013-06-21 14:00:00";

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
            "yyyy-MM-dd HH:mm:ss");
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("CST"));

    Date date = null;
    try {
        date = simpleDateFormat.parse(cstTime);
    } catch (ParseException e) {
        System.out.println("Parse time error");
        e.printStackTrace();
    }

    TimeZone destTz = TimeZone.getDefault();//here I should get EDT on my phone
    simpleDateFormat.setTimeZone(destTz);
    String convertedLocalTime = simpleDateFormat.format(date);

    //the converted time I get is  "2013-06-21 10:00:00" 
    //but it should be             "2013-06-21 15:00:00" 

CST の代わりに GMT を使用しているようで、以下はデバッグ時に得たものです。

String abc = TimeZone.getTimeZone("CST").toString();
System.out.println("CST:"+abc);
Output:
I/System.out(19404): CST:java.util.SimpleTimeZone[id=GMT,offset=0,dstSavings=3600000,
useDaylight=fals‌​e,startYear=0,startMode=0,startMonth=0,startDay=0,startDayOfWeek=0,
startTime=0,en‌​dMode=0,endMonth=0,endDay=0,endDayOfWeek=0,endTime=0]

GMTを使用していますか?なぜ.. よろしくお願いします!

編集:

最後に使用して動作させました

simpleDateFormat.setTimeZone(TimeZone.getTimeZone( "GMT-5")); //GMT-5 is for CDT, I found my server is actually using CDT not CST

文字列「CST」を使用しても機能しない理由はまだわかりません...

4

6 に答える 6

10

getTimeZone の javadoc から:

Returns a TimeZone corresponding to the given id, or GMT for unknown ids. 

An ID can be an Olson name of the form Area/Location, such as America/Los_Angeles. 
The getAvailableIDs() method returns the supported names. 

getAvailableIDs を使用してみてください。

于 2013-06-21T19:40:25.730 に答える
4

「CST6CDT」タイムゾーンを使用すると、中央夏時間 (CDT) が CST に戻ったとき、またはその逆のときに、正しい時刻が自動的に提供されます。

于 2015-09-09T06:28:58.700 に答える
1

同様の問題に直面していたので、次のことがうまくいったようです:

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("America/Chicago"));
于 2014-09-21T19:36:32.757 に答える
1

日時変換については、JODA日時を使用することをお勧めします。これは、日時の問題を解決するのに役立ちます。

タイムゾーンで日付を初期化し、それらの間で非常に簡単に変換できます

DateTimeZone zone = DateTimeZone.forID("Europe/London");

また

DateTimeZone zoneUTC = DateTimeZone.UTC;

JODA DATE TIME APIから

DateTime(DateTimeZone zone)
Constructs an instance set to the current system millisecond time using ISOChronology in the specified time zone.
于 2013-06-21T19:53:28.767 に答える
0

One thing I found is that Java's TimeZone doesn't recognize "+09:00", but it does recognize "GMT+09:00" and "GMT+0900".

于 2015-12-16T17:53:35.457 に答える