0

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


ジェスパーの答えからの解決策

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");
4

5 に答える 5

1

SimpleDateFormatを使用します。ここでjavadocsを参照してください。

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

于 2010-12-16T03:14:04.970 に答える
1

残念ながら、標準SimpleDateFormatクラスはISO8601形式をうまく処理できません。具体的に:は、最後のタイムゾーンオフセットにあるを処理できません。

タイムゾーンオフセットからを手動で削除して:、次のような文字列を取得することができます。

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

-0800(タイムゾーンオフセットはではなく)であることに注意してください-08:00SimpleDateFormat次に、の形式で解析できますyyyy-MM-dd'T'HH:mm:ss.SSSZ

ただし、時間と日付を処理するには、人気のあるJoda-Timeライブラリを使用することをお勧めします。これは、標準のJava APIの日付およびカレンダークラスよりもはるかに優れており、ISO8601形式を適切に処理します。

于 2010-12-16T09:07:06.810 に答える
0

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

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

これは間違いなくあなたにグレゴリオ暦のオブジェクトを与えるでしょう

于 2010-12-16T03:18:07.430 に答える
0
 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();
于 2010-12-16T05:13:33.150 に答える
0

他の回答は正しいですが、現在は古くなっています。それらは、現在java.timeフレームワークに取って代わられている厄介な古いクラスを使用します。

java.timeの使用

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

入力文字列にはUTCからのオフセットが含まれているため、として解析しますOffsetDateTime

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

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

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フレームワークは、 Java8以降に組み込まれています。java.util.Dateこれらのクラスは、、、、などの古い厄介な日時クラスに取って代わり.Calendarますjava.text.SimpleDateFormat

現在メンテナンスモードになっているJoda -Timeプロジェクトは、java.timeへの移行をアドバイスします。

詳細については、 Oracleチュートリアルを参照してください。そして、StackOverflowで多くの例と説明を検索してください。

java.time機能の多くはThreeTenのJava6および7にバックポートされています-バックポートされさらにThreeTenABPのAndroidに適合されています。

ThreeTen -Extraプロジェクトは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性のある試験場です。ここには、、、などの便利なクラスがIntervalあります。YearWeekYearQuarter

于 2016-08-14T22:41:59.123 に答える