2010-12-15T16:26:49.841-08:00をJavaのグレゴリアンカレンダーに変換するにはどうすればよいですか? [複製
-
10-10-2019 - |
質問
この質問にはすでに答えがあります:
文字列の日付「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
, 、 もっと。