アカウント名:
パスワード:
「こんなもの、ライブラリを使うまでもない」。そして罠に嵌る。
いやあライブラリ使っても油断してると簡単に罠にはまりますよ。たとえば任意の日付の1ヵ月後、2ヵ月後、…12ヵ月後の日付までを求める処理をJavaで
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");Calendar cal = Calendar.getInstance();for (int i = 0; i < 12; i++) { cal.add(Calendar.MONTH, 1); System.out.println(df.format(cal.getTime()));}
みたいにしちゃうとか。
ここでいうライブラリとは、「任意の日付のnカ月後の日付を求める処理」そのものの事ですよ。
そんなのdateコマンドでとググったら面白いの見つけた。
http://shellscript.sunone.me/date.html [sunone.me]#私もバグ作るとこだったか。
1ヶ月後だとそんなに違和感は無いが、1ヶ月前だとおかしなことになるという話. date -d '2012-03-31 1 months ago' '+%m'
"nヵ月後"だとまず暦日でしょうけど、存在しない日は月末とみなすのか、翌日に繰り下げるのかとか稼働日なのか解釈はいろいろあるし。
> 1ヶ月後だとそんなに違和感は無いが、1ヶ月前だとおかしなことになるという話.1月31日の1ヵ月後でも同じ問題が起きるはずなので(試してないけど)前か後かの問題じゃないような。> 解釈はいろいろあるし。まあいろいろあるんですけど、(営業日とか考慮しないで) 1月31日の2ヵ月後が平年は3月28日、閏年は3月29日になるのが仕様というのは、そういうプログラムを書いてしまった後で言い張る場合以外にはなかなかないのではないかと。
1月31日の"1ヵ月後"だと、「月末までじゃ日数少なくなっちゃうよ。存在しない日付の分,3月に食い込んでもいいよね?」というのはよくあるよね。ね?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家
バグの原因 (スコア:0)
うるう年判定なんて、一回プログラム書いてテストしたらまず変更しないだろうし、インターフェイス気に入らないから作り直すっていうようなインターフェイスにはならないと思うのですが。
「小さいから簡単だろw」って思って毎回作り直してるんですかね。
Re: (スコア:0)
「こんなもの、ライブラリを使うまでもない」。
そして罠に嵌る。
Re: (スコア:0)
いやあライブラリ使っても油断してると簡単に罠にはまりますよ。
たとえば任意の日付の1ヵ月後、2ヵ月後、…12ヵ月後の日付までを求める処理をJavaで
みたいにしちゃうとか。
Re: (スコア:1)
ここでいうライブラリとは、「任意の日付のnカ月後の日付を求める処理」そのものの事ですよ。
Re: (スコア:0)
そんなのdateコマンドでとググったら面白いの見つけた。
http://shellscript.sunone.me/date.html [sunone.me]
#私もバグ作るとこだったか。
1ヶ月後だとそんなに違和感は無いが、1ヶ月前だとおかしなことになるという話.
date -d '2012-03-31 1 months ago' '+%m'
"nヵ月後"だとまず暦日でしょうけど、存在しない日は月末とみなすのか、翌日に繰り下げるのかとか稼働日なのか解釈はいろいろあるし。
Re: (スコア:0)
> 1ヶ月後だとそんなに違和感は無いが、1ヶ月前だとおかしなことになるという話.
1月31日の1ヵ月後でも同じ問題が起きるはずなので(試してないけど)前か後かの問題じゃないような。
> 解釈はいろいろあるし。
まあいろいろあるんですけど、(営業日とか考慮しないで) 1月31日の2ヵ月後が平年は3月28日、閏年は3月29日になるのが仕様というのは、そういうプログラムを書いてしまった後で言い張る場合以外にはなかなかないのではないかと。
Re:バグの原因 (スコア:0)
1月31日の"1ヵ月後"だと、「月末までじゃ日数少なくなっちゃうよ。存在しない日付の分,3月に食い込んでもいいよね?」というのはよくあるよね。ね?