質問

Date:Mon、27 Oct 2008 08:33:29 -0700 のようなメールヘッダーの文字列があります。私が必要なのは、同じ瞬間を表すGregorianCalendarのインスタンスです。それと同じくらい簡単です-どうすればいいですか?

そして最速のものについては、これは正しく動作しません

SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)

タイムゾーンをUTC(またはJavaバージョンに応じてローカルマシンの時間)に正規化するためです。必要なのは、 -7 * milisInAnHour を返すcalendar.getTimeZone()。getRawOffset()です。

役に立ちましたか?

解決

選択肢がある場合は、Joda Timeライブラリを調べることをお勧めします。コアプラットフォームが同様の機能を提供する場合、通常はサードパーティライブラリを使用することに反対しますが、Joda Timeの作成者もJSR310の背後にいるため、例外を作成しました。

http://joda-time.sourceforge.net/

とにかく、Joda Timeがオプションの場合、次のようなものが動作するはずです:

DateTimeFormatter formatter =
    DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();

これが役立つことを願っています。

他のヒント

  

そして最速のもの-これは適切に動作しません...   タイムゾーンをUTC(またはJavaバージョンに応じてローカルマシンの時間)に正規化するためです。必要なのは、-7 * milisInAnHourを返すcalendar.getTimeZone()。getRawOffset()です。

まあ技術的にはこれは機能します。なぜなら、TimeZoneが現在のシステムのTimeZoneと等しいオブジェクトを返す一方で、オフセットを考慮して時刻が修正されるからです。

このコード:

String dateString = "Mon, 27 Oct 2008 08:33:29 -0700";
DateFormat df = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss Z");
Date parsed = df.parse(dateString);
System.out.println("parsed date: " + parsed);

Calendar newCalendar = Calendar.getInstance();
newCalendar.setTime(parsed);

出力:

  

解析日:月10月27日11:33:29 EDT 2008

これは技術的には正しいです。私のシステムのタイムゾーンはEDT / UTCから4時間(これはあなたの3時間先です)です。 1970年1月1日00:00:00 GMT( Date オブジェクトが日付/時刻を格納する方法)以降のミリ秒数として時間を表す場合、これらの日付/時刻は等しくなります。異なるのはTimeZoneだけです。

あなたの問題は本当に日付/カレンダーをタイムゾーンに変換するにはどうすればよいですか?そのために、前の質問 Javaを使用してカレンダーのTimeZonesを処理する方法

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top