6

joda-time を使用して、フォームの日付文字列を解析しようとしていますYYYY-MM-DD。次のようなテストコードがあります。

DateTimeFormatter dateDecoder = DateTimeFormat.forPattern("YYYY-MM-DD");
DateTime dateTime = dateDecoder.parseDateTime("2005-07-30");

System.out.println(dateTime);

どの出力:

2005-01-30T00:00:00.000Z

ご覧のとおり、DateTime生成されるオブジェクトは30 Jan 2005ではなく です30 July 2005

どんな助けにも感謝します。ここにリストされている日付形式の1つであるため、これが機能すると思いました。

4

3 に答える 3

5

混乱は、ISO 形式が実際に何であるかに関係しています。YYYY-MM-DDは ISO 形式ではなく、実際の結果の日付は ISO 形式です。

ISO- 8601形式2005-07-30も同様、仕様では形式の説明YYYY-MM-DDに使用されます。仕様内のパターンとしての使用とコードの一部との間には関係がありません。仕様が課す唯一の制約は、結果が 4 桁の年、その後にダッシュ、2 桁の月、ダッシュ、2 桁の日で構成されることです。YYYY-MM-DD

そのため、仕様では を使用することもできました。これは、出力形式$year4-$month2-$day2を同様に適切に定義します。

「Y」を「y」に、「D」を「d」に変換するには、入力パターンを検索して置換する必要があります。

また、書式設定に関する強化されたドキュメントもいくつか追加しました。

于 2013-10-04T11:46:25.723 に答える
3

w3 ドキュメントに記載されている日付形式と JodaTime のDateTimeFormatものは異なります。

より具体的にはDateTimeFormat、 のパターンDDは 用であるため、 ofDay in yearの値は 1 年の 30 日目、つまり です。1月30日。フォーマッタは日付を読み取っているため、月を に設定します。年間通算日を読み取ると、1 月の日付で上書きされます。DD30String0701

DateTimeFormatw3 の日時形式で期待されるパターン文字列ではなく、 で期待されるパターン文字列を使用する必要があります。この場合、それは

DateTimeFormatter dateDecoder = DateTimeFormat.forPattern("yyyy-MM-dd");
于 2013-10-06T14:17:51.337 に答える