- ベストアンサー
指定日付から90日後の日付を算出するには
Perlの質問です。 登録日 2006/1/1 2006/2/10 2006/2/20 2006/3/15 の様なテキストファイルがあります。 このファイルを読み込んで、各レコードの値ごとに この登録日より90日後の日付を算出したいのですが、どのようなコードになるのでしょう。 ちなみに現在から何日後の日付を出すというサンプルは見つけました。 http://www.aimix.jp/cgi/accdatecnt.html しかしこれはtimeで現在日時を取り出して、それに何日間を秒単位にして加算するということなので、理屈はわかるのですが、いまいち今回のやりたいことに結び付けれません。 timeが1970年1月1日 00:00:00 から現在までの秒数を算出する関数ですから このように、先のリストの例でいうと、2006/1/1 00:00:00は、1970年1月1日 00:00:00 から何秒目なのかを算出できればなんとか出来そうなんですが・・・
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 そういった計算は、一度ユリウス日というものに変換してから計算すると非常に楽になります。 http://web.kyoto-inet.or.jp/org/my-art/library/calsmpl/cldttojd.html http://www.dinop.com/vc/getjd.html ユリウス日は1つの数値なので、該当の日付をユリウス日に変換して+90してグレゴリウス歴(通常の年月日)に変換しなおすと、非常に簡単に、n日後を求めることが出来るようになります。
お礼
なるほど、こんなふうにいろいろ歴の計算があるんですね。 とりあえず、今回は#1の方の参考URLを使ってみます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
CPAN モジュールのDate::Calc を用いて以下のような感じ ---------------------------------------------------------------- use Date::Calc qw(Add_Delta_Days); while(<DATA>){ ($year,$month,$day)= split('/',$_); ($y, $m, $d) = Add_Delta_Days($year,$month,$day, 90); print "$y/$m/$d\n"; } __DATA__ 2006/1/1 2006/2/10 2006/2/20 2006/3/15
お礼
ご親切なコードありがとうございます。 CPANというのを調べてみましたけれど、このモジュールのインストールはWindowsでは結構難しそうですね。
- pipipi523
- ベストアンサー率40% (148/365)
参考urlの内容、微妙にずれてますね… timelocalというモジュール(無ければCPANでインストールするとか)で、 2006/3/15値を1970年1月1日 00:00:00からその値までの秒数を返してきます これに90*24*3600の値を足してlocaltimeで再度変換します
お礼
CPANというのを調べてみましたけれど、このモジュールのインストールはWindowsでは結構難しそうですね。
お礼
ありがとうございます。 これで出来そうです。