2010-12-15T16:26:49.841-08:00をJavaのグレゴリアンカレンダーに変換するにはどうすればよいですか? [複製

StackOverflow https://stackoverflow.com/questions/4457108

質問

この質問にはすでに答えがあります:

文字列の日付「2010-12-15T16:26:49.841-08:00」があり、Javaのグレゴリアンカレンダーに変換する必要があります。これはどうやるんですか?


Jesperの答えからの解決策

JODA時間を使用したソリューションのコード:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ").withOffsetParsed();
DateTime date = formatter.parseDateTime("2010-12-15T16:26:49.841-08:00");
役に立ちましたか?

解決

残念ながら、標準 SimpleDateFormat クラスは処理できません ISO 8601形式 結構。具体的には、処理できません : それは最後のタイムゾーンオフセットです。

あなたができることは手動で削除することです : TimeZone Offsetから、次のような文字列を取得するようにします。

2010-12-15T16:26:49.841-0800

(TimeZoneオフセットはです -0800 それ以外の -08:00)。その後、あなたはそれを解析することができます SimpleDateFormat フォーマット付き yyyy-MM-dd'T'HH:mm:ss.SSSZ.

しかし、人気を使用する方が良いです ジョーダタイム 時間と日付を処理するライブラリ。標準のJava API日付およびカレンダークラスよりもはるかに優れており、ISO 8601形式を適切に処理します。

他のヒント

SimpleDateFormatを使用して、Javadocsを参照してください。

次に、日付をカレンダーに変換します。ここでたくさんの例を見てください:

このコードで試すことができます

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

これにより、間違いなくグレゴリオカレンダーオブジェクトが得られます

 String dateTimeString="2010-12-15T16:26:49.841-08:00"; 

 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

 DateTime dateTime = formatter.parseDateTime(dateTimeString);

 GregorianCalendar cal = dateTime.toGregorianCalendar();

他の答えは正しいですが、今では時代遅れです。彼らは現在、Java.Timeフレームワークに取って代わられた厄介な古いクラスを使用しています。

Java.Timeを使用します

入力文字列はたまたま準拠しています ISO 8601 標準フォーマット。したがって、Java.timeクラスは文字列を解析/生成するときにデフォルトでISO 8601を使用するため、フォーマットパターンを指定する必要はありません。

入力文字列にはOffset-from-UTCが含まれているため、 OffsetDateTime.

String input = "2010-12-15T16:26:49.841-08:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input );

特定のタイムゾーンを念頭に置いている場合、それを単なるオフセットからではなく、それを適用してください。

ZoneId zoneId = ZoneId.of( "America/Los_Angele" );
ZonedDateTime zdt = odt.atZone( zoneId );

GregorianCalendar

次のような古い日付クラスを避ける必要があります GregorianCalendar. 。ただし、Java.Timeについてまだ更新されていない古いコードと相互運用する必要がある場合は、変換できます。コンバージョンのために古いクラスに追加された新しい方法を使用します。詳細と気の利いた図については、私の 質問答え.

Calendar cal = java.util.GregorianCalendar.from( zdt );  // Do such conversions out of java.time only if absolutely necessary.

Java.timeについて

Java.Time フレームワークはJava 8以降に組み込まれています。これらのクラスは、古い厄介な日付クラスに取って代わります java.util.Date, .Calendar, & java.text.SimpleDateFormat.

ジョーダタイム プロジェクト、今 メンテナンスモード, 、Java.timeへの移行をアドバイスします。

詳細については、を参照してください Oracleチュートリアル. 。多くの例と説明については、スタックオーバーフローを検索します。

Java.timeの機能の多くは、Java 6と7にバックポートされています Threeten-Backport さらに適応します アンドロイドThreetenabp.

Threeten-Extra プロジェクトは、追加のクラスでJava.Timeを延長します。このプロジェクトは、Java.timeに将来の追加の可能性の実証済みの基盤です。ここには、いくつかの有用なクラスがあります Interval, YearWeek, YearQuarter, 、 もっと。

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