• ベストアンサー

指定日付から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 から何秒目なのかを算出できればなんとか出来そうなんですが・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1
souta_n
質問者

お礼

ありがとうございます。 これで出来そうです。

その他の回答 (3)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.4

がると申します。 そういった計算は、一度ユリウス日というものに変換してから計算すると非常に楽になります。 http://web.kyoto-inet.or.jp/org/my-art/library/calsmpl/cldttojd.html http://www.dinop.com/vc/getjd.html ユリウス日は1つの数値なので、該当の日付をユリウス日に変換して+90してグレゴリウス歴(通常の年月日)に変換しなおすと、非常に簡単に、n日後を求めることが出来るようになります。

souta_n
質問者

お礼

なるほど、こんなふうにいろいろ歴の計算があるんですね。 とりあえず、今回は#1の方の参考URLを使ってみます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

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

souta_n
質問者

お礼

ご親切なコードありがとうございます。 CPANというのを調べてみましたけれど、このモジュールのインストールはWindowsでは結構難しそうですね。

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.2

参考urlの内容、微妙にずれてますね… timelocalというモジュール(無ければCPANでインストールするとか)で、 2006/3/15値を1970年1月1日 00:00:00からその値までの秒数を返してきます これに90*24*3600の値を足してlocaltimeで再度変換します

souta_n
質問者

お礼

CPANというのを調べてみましたけれど、このモジュールのインストールはWindowsでは結構難しそうですね。

関連するQ&A