Date: Mon, 27 Oct 2008 08:33:29 -0700
のようなメールヘッダーの文字列があります。私が必要としているのは、同じ瞬間を表すグレゴリオ暦のインスタンスです。それと同じくらい簡単です-どうすればいいですか?
そして最速のものの場合-これはnot正しく動作します:
SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)
タイムゾーンをUTC(またはJavaバージョンによってはローカルマシンの時間)に正規化するためです。必要なのは、-7 * milisInAnHour
を返すcalendar.getTimeZone()。getRawOffset()です。 。
オプションの場合は、JodaTimeライブラリを調べることをお勧めします。コアプラットフォームが同様の機能を提供する場合、私は通常、サードパーティのライブラリを使用することに反対していますが、Joda Timeの作成者もJSR310の背後にいて、JodaTimeは基本的にJava最終的に7。
http://joda-time.sourceforge.net/
とにかく、Joda Timeがオプションの場合、次のようなものが機能するはずですshould:
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);
出力:
解析日:Mon Oct 27 11:33:29 EDT 2008
私のシステムのタイムゾーンはEDT/UTCから4時間マイナス(これはあなたのシステムより3時間進んでいます)なので、これは技術的に正しいです。 1970年1月1日00:00:00GMT(Date
オブジェクトが日付/時刻を格納する方法)からのミリ秒数として時間を表すと、これらの日付/時刻は等しくなります。異なるTimeZone。
あなたの問題は本当に日付/カレンダーを自分のタイムゾーンに変換するにはどうすればよいですか?そのために、前の質問に対する私の回答を見てください Javaを使用してカレンダーのタイムゾーンを処理する方法は?