2

Java では、次の形式の String から Calendar オブジェクトを作成する必要があります。

yyyy-MM-dd'T'HH:mm:ss

この文字列は常に GMT 時間として設定されます。だからここに私のコードがあります:

    public static Calendar dateDecode(String dateString) throws ParseException
{
    TimeZone t = TimeZone.getTimeZone("GMT");
    Calendar cal = Calendar.getInstance(t);
    date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    Date d = date.parse(dateString);
    cal.setTime(d);
    return cal;
}

その後:

Calendar cal = Calendar.getInstance();
    try
    {
        cal = dateDecode("2002-05-30T09:30:10");
    } catch (ParseException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    int month =  cal.get(Calendar.MONTH)+1;

そして、次の出力が得られます。

Timezone: GMT+00:00 date: 2002-5-30 time: 7:30:10

提供された時間はCETではなくGMTであるため、これは間違っていることがわかります。提供された時間が CET (私の現在のタイムゾーン) であると考えているため、時間を CET から GMT に変換し、最終結果から 2 時間を差し引いていると思います。

誰でもこれで私を助けることができますか?

ありがとう

ところで: さまざまな理由で JodaTime を使用したくありません。

4

2 に答える 2

4

解析する前にタイムゾーンを設定するのに役立つコードを次に示します。

// sdf contains a Calendar object with the default timezone.
Date date = new Date();
String formatPattern = ....;
SimpleDateFormat sdf = new SimpleDateFormat(formatPattern);

TimeZone T1;
TimeZone T2;
....
....
// set the Calendar of sdf to timezone T1
sdf.setTimeZone(T1);
System.out.println(sdf.format(date));

// set the Calendar of sdf to timezone T2
sdf.setTimeZone(T2);
System.out.println(sdf.format(date));

// Use the 'calOfT2' instance-methods to get specific info
// about the time-of-day for date 'date' in timezone T2.
Calendar calOfT2 = sdf.getCalendar();

私が見つけた別の同様の質問も役立つかもしれません: How to set default time zone in Java and control the way the way date are stored on DB?

編集:

Java と日付に関する優れたチュートリアルもここにあります: http://www.tutorialspoint.com/java/java_date_time.htm

于 2012-07-03T10:50:23.747 に答える