1. ホーム

日付書式yyyy-MM-ddとYYYY-MM-ddの違いは何ですか?

2022-03-02 10:22:16

先日、日付書式設定ツールのクラスを書き、自分なりにテストをしていたところ、偶然にもおかしな問題を発見しました。formatパラメータをYYYY-MM-DDにすると、出力が非常におかしくなってしまうのです。

Date result1 = string2Date("2016-12-15", "yyyy-MM-dd");
System.out.println(result1);
Date result2 = string2Date("2016-12-15", "YYYY-MM-DD");
System.out.println(result2);

Date date1 = new Date();
System.out.println(date2String(date1, "yyyy-MM-dd"));
System.out.println(date2String(date1, "YYYY-MM-DD"));

結果

Thu Dec 15 00:00:00 CST 2016
Sun Dec 27 00:00:00 CST 2015
2016-12-20
2016-12-355

の場合、日付は明らかに2016年であり、変換後の形式は2015年になります。行ってみます。

テストバージョンjdk1.7、いくつかの記事を読みましたが、yは年、Yは週を表しているようです。

yyyy は暦年を指定し、YYYY は ISO 年週刊カレンダーで使用される年("Week of Year")を指定するものである。
1月1日が月、火、水、木であれば01週目であることを意味します。1月1日が金、土、日の場合は、前年の52週目、53週目にあたります。
これでは、私の実験結果である2016年12月、いくら週数を数えても2015年までカウントできないですよね?
この部分がjavaでどのように実装されているのかまだ分かっていないのですが、windows OSと関係がありそうな気がするのですが?