西暦1000年って閏年なの? そうじゃないの?

西暦1000年2月29日をシステム上どう扱うのか、というお話
56

なんとなく、日付なんてものはすべてのシステムで同じように扱われているべき、と盲目的に思っていたが、そうではないようで・・・

だいくしー @daiksy

西暦1000年って100で割り切れるけど400で割り切れないから平年だよね? JavaのDate型で2月29日入っちゃうんだけど・・・。

2013-04-17 10:55:20
餅岡 @mochi_oka

@daiksy 内部的には3月1日になってません?

2013-04-17 10:56:06
だいくしー @daiksy

@mochi_oka なってません・・・。このままDBにinsertすると、mySqlは正しく判定するのでここでエラーに・・・。

2013-04-17 10:57:15
Takao Takahashi @_tsq

@daiksy そもそも閏って1,000年には適用できないと思いますけど。閏自体が西暦1,000年の後に導入されてるはずですし。なので、そこは歴計算のアルゴリズムがどうなってるか、だと思いますけどね。

2013-04-17 10:59:19
だいくしー @daiksy

@_tsq そうなんですねー。MySQLだと、平年で扱われて、システム側のバリデーションと不一致をおこしていたのですが、どちらが正しいというわけではないのか・・・。

2013-04-17 11:00:47
Takao Takahashi @_tsq

@daiksy 暦って、割と最近考えられた合理化する方法ですからねぇ。MySQLとシステムでなんぞ計算方法に不一致があるんでしょう。かといって、そもそもが閏のない時代のことは責められないしw

2013-04-17 11:04:07
だいくしー @daiksy

@_tsq たしかにw これは暦の無い時代の話だw

2013-04-17 11:05:16
Takao Takahashi @_tsq

@daiksy 今の暦って、確か1500年頃からなので、それ以降でないと適用できないはずなんですよねぇ。

2013-04-17 11:07:12
だいくしー @daiksy

1900年とか2100年とかは当然正しく動作するのに、なぜJavaではわざわざ1000年は閏年として扱うんやろか・・・。

2013-04-17 11:10:48
だいくしー @daiksy

おお! 1582年(グレゴリオ暦の採用年)以前はユリウス暦で閏年の計算が実装されてるんか!!!だから1000年は閏年になるんか!!!!

2013-04-17 11:16:53
ISHII Hidenori @h141gm

@daiksy Wikipediaも1000年は"西暦(ユリウス暦)による、閏年"と書かれていますね http://t.co/AuY4ICF2nm

2013-04-17 11:28:47
だいくしー @daiksy

Javaのバグじゃねーの? とか疑ってごめんなさい・・・。

2013-04-17 11:29:58
へっぽこ@憑かれました @guin_y

@daiksy Oracleも1000年2月29日は登録可能ですね

2013-04-17 11:30:02
ISHII Hidenori @h141gm

@daiksy @guin_y ついでに、PostgreSQLではMySQLと同じく平年でした(1000年2月29日はinsertできない)

2013-04-17 11:44:22
ISHII Hidenori @h141gm

@daiksy 何故PostgreSQLは正しくないグレゴリオ暦を用いるかの公式マニュアルによる解説。(ちょっといいわけくさいw) http://t.co/LM4KdAmL2I

2013-04-17 12:41:16

MySQLも
proleptic Gregorian calendar
(先発グレゴリオ暦)とのこと
http://dev.mysql.com/doc/refman/5.1/ja/mysql-calendar.html

反響が大きかったのでブログにまとめました。

http://tech.furyu.jp/blog/?p=2321