日付の計算 (2/29 + 1年 – 1年 = 2/28)

システム開発で日付の処理で厄介なうるう年ですが、2/29は、1年足して、1年引くと違う日になっちゃうんですね。

import java.util.Calendar;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class Main {
public static void main(String[] args) throws Exception {
Date d = DateFormat.getInstance().parse("2004/02/29 00:00:00");
Calendar c = Calendar.getInstance();
c.setTime(d);
System.out.println("org: " +
new SimpleDateFormat("yyyy/MM/dd").format(c.getTime()));
c.add(Calendar.YEAR, 1);
System.out.println(" +1: " +
new SimpleDateFormat("yyyy/MM/dd").format(c.getTime()));
c.add(Calendar.YEAR, -1);
System.out.println(" -1: " +
new SimpleDateFormat("yyyy/MM/dd").format(c.getTime()));
}
}
org: 2004/02/29
+1: 2005/02/28
-1: 2004/02/28

PostgreSQLでも、同じ。

postgres=# select
postgres-#  cast(
postgres(#    (cast('2004/02/29' as timestamp) + '1 year') as timestamp
postgres(#  ) + '-1 year' as leap;
leap
---------------------
2004-02-28 00:00:00
(1 行)

当たり前って言えば、あたりまえか。

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.