プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (4件)

ここで解るでしょうか?


http://cocohome.hp.infoseek.co.jp/cocohome/l_nis …
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/10 18:07

がると申します。


そういった計算は、一度ユリウス日というものに変換してから計算すると非常に楽になります。

http://web.kyoto-inet.or.jp/org/my-art/library/c …
http://www.dinop.com/vc/getjd.html

ユリウス日は1つの数値なので、該当の日付をユリウス日に変換して+90してグレゴリウス歴(通常の年月日)に変換しなおすと、非常に簡単に、n日後を求めることが出来るようになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/10 18:12

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/10 18:10

参考urlの内容、微妙にずれてますね…


timelocalというモジュール(無ければCPANでインストールするとか)で、
2006/3/15値を1970年1月1日 00:00:00からその値までの秒数を返してきます
これに90*24*3600の値を足してlocaltimeで再度変換します
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/10 18:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!