通りすがりです。どのような出力であればokuさんが微妙に思わないのか書かれていていないので、比較の対象になるのか、お役に立つのかわかりませんがOS Xの場合です。+1yearのように洒落たことができませんので秒数で増減させてみます。man date [apple.com]。
$ date -ur 1204243200 #2/29はエポックから1204243200秒 Fri Feb 29 00:00:00 UTC 2008 $ date -ur $((1204243200+60*60*24*365)) #一年後 Sat Feb 28 00:00:00 UTC 2009 $ date -ur $((1204243200-60*60*24*365)) #一年前 Thu Mar 1 00:00:00 UTC 2007 $ date -ur $((1204243200+60*60*24*1+60*60*24*365)) #一日足して一年後 Sun Mar 1 00:00:00 UTC 2009 $ date -ur $((1204243200+60*60*24*1-60*60*24*365)) #一日足して一年前 Fri Mar 2 00:00:00 UTC 2007
Linux箱にバージョン違いがあったので一緒に載せておきます。6.10と一緒ですね。
$ date --version date (coreutils) 5.2.1 Written by David MacKenzie.
Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ date '+%x' -d '2008-02-29 +1year' 03/01/09 $ date '+%x' -d '2008-02-29 -1year' 03/01/07 $ date '+%x' -d '2008-03-01 +1year' 03/01/09 $ date '+%x' -d '2008-03-01 -1year' 03/01/07
OS Xの場合 (スコア:1)
通りすがりです。どのような出力であればokuさんが微妙に思わないのか書かれていていないので、比較の対象になるのか、お役に立つのかわかりませんがOS Xの場合です。+1yearのように洒落たことができませんので秒数で増減させてみます。man date [apple.com]。
Linux箱にバージョン違いがあったので一緒に載せておきます。6.10と一緒ですね。
Re:OS Xの場合 (スコア:1)
-- Takehiro TOMINAGA // may the source be with you!
賢いのか微妙なのか微妙 (スコア:1)
こんにちはttさん。これなら縮退しませんよ :)
# 予想外の賢い結果にビックリRe:賢いのか微妙なのか微妙 (スコア:1)
-- Takehiro TOMINAGA // may the source be with you!
桑原桑原 (スコア:1)
ええそうなんですよ。私なら気がするどころか、絶対にハマリますね。閏日を跨ぐときはもとより閏年、ひいては日付計算は要注意ってことで。
Re:OS Xの場合 (スコア:1)
既にお二人とも収束しておられるようですが、元ネタは java.util.GregorianCalendar の bug [sun.com] です。 評価欄によれば、
職場では「バグ」として報じられたのですが、自分的には「そりゃ『翌年の今日』の定義によるんじゃないの?」と思って、取り敢えず近場にあった GNU date(1) を試してみたところ... というわけです。 :-)
ちなみに FreeBSD (≒OS X) の date なら「-v +1y」で同じことができるのではないでしょうか。