スポンサー広告 - スポンサーサイト

--/--/-- (--) --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【プログラミング】JAVA - うるう年

2012/02/26 (日) 23:43

今年はうるう年です。
2月の29日が存在するので、仕事でも影響調査がありました。
その時にちょっと気になったことがあったのでメモ。

■お試しソース

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Calendar cal = Calendar.getInstance();

System.out.println("----------");
System.out.println("うるう年から1年引いてみる");

cal.set(Calendar.YEAR, 2012);
cal.set(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 29);
cal.add(Calendar.YEAR, -1);
System.out.println(sdf.format(cal.getTime()));

System.out.println("----------");
System.out.println("うるう年の前日から1年引いてみる");

cal.set(Calendar.YEAR, 2012);
cal.set(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 28);
cal.add(Calendar.YEAR, -1);
System.out.println(sdf.format(cal.getTime()));

System.out.println("----------");
System.out.println("うるう年の翌年の2月末日から1年引いてみる");

cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 28);

cal.add(Calendar.YEAR, -1);
System.out.println(sdf.format(cal.getTime()));

System.out.println("----------");
System.out.println("うるう年の翌年の3月1日から1年引いてみる");

cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.MONTH, 2);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.add(Calendar.YEAR, -1);
System.out.println(sdf.format(cal.getTime()));

System.out.println("----------");

■実行結果
----------
うるう年から1年引いてみる
2011/02/28
----------
うるう年の前日から1年引いてみる
2011/02/28
----------
うるう年の翌年の2月末日から1年引いてみる
2012/02/28
----------
うるう年の翌年の3月1日から1年引いてみる
2012/03/01
----------

何が言いたいのかというと、
・2月29日から1年引いた場合と、2月28日から1年引いた場合の『日』は28になる。
・1年引くと2月29日になる日というのは存在しない。
ということです。
経緯は考えないとして、もし月末の処理で1年前の末日を求める処理をしていた場合、単純に1年引く処理をしていると、うるう年の翌年に誤動作を起こすかもしれない!
とか。
cal.getActualMaximum(Calendar.DATE)
とかすると、月末の日付が取れるのでこれでなんとかするか、
1年引く⇒1ヵ月足す⇒その月の1日にする⇒1日引く
とかでも取れるっちゃ取れるかねぇ。

とにかく、4年に一度のイベントだけども、その年に限らず前後の年のことも考慮して調査しないと、忘れたころに障害とかが起きそうな予感です。
関連記事
スポンサーサイト
検索フォーム
RSSリンクの表示
カレンダー
01 | 2012/02 | 03
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 - - -
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。