-2

配列リストの連絡先に追加するために、誕生日を文字列から日付に変換しようとしています。次に、連絡先から読み取り、誕生日を表示します。ただし、05/02/1990 は 365/12/1990 になり、06/12/1991 は 365/12/1991 になります (つまり、DD と MM は正しくありません)。助けてくれてどうもありがとう!

ArrayList<Person> contacts = new ArrayList<Person>();
...
String firstName = sc.next();
String lastName = sc.next();
String email = sc.next();
String birthdayStr = sc.next();
SimpleDateFormat formatter = new SimpleDateFormat("DD/MM/YYYY");
try{

    Date birthday = formatter.parse(birthdayStr); 
    Person s = new Person(firstName, lastName, email, birthday);
    contacts.add(s);
    Date b = s.getBirthday();
    System.out.println(formatter.format(b));

}catch(ParseException e){

   System.out.println( e.getMessage());
}
4

1 に答える 1

3

D年は日です。月の日には小文字が必要ですd。小文字yも使用します。

new SimpleDateFormat("dd/MM/yyyy")

大文字の使用は、週の年Yに関連しています。

1 週間の年は、WEEK_OF_YEAR サイクルと同期しています。最初の週と最後の週 (両端を含む) の間のすべての週は、同じ週の年の値を持ちます。したがって、週の最初の日と最後の日は、暦年の値が異なる場合があります。

たとえば、1998 年 1 月 1 日は木曜日です。getFirstDayOfWeek() が MONDAY で getMinimalDaysInFirstWeek() が 4 (ISO 8601 標準互換設定) の場合、1998 年の第 1 週は 1997 年 12 月 29 日に始まり、1998 年 1 月 4 日に終わります。最後の 3 日間の週の年は 1998 です。ただし、getFirstDayOfWeek() が SUNDAY の場合、1998 年の第 1 週は 1998 年 1 月 4 日に始まり、1998 年 1 月 10 日に終わります。1998 年の最初の 3 日間は 1997 年の第 53 週の一部であり、その週の年は 1997 です。

年に対するこの「副作用」を避けるために、小文字yを使用できます。

于 2013-01-26T16:40:30.680 に答える