1970/1/1 からの経過日数を求める

Perlで経過日数を求めるからですが、awk でも簡単に求まります。

gawk や xgawk では mktime() 関数が使えますから、日付から経過秒数を求め、そこから経過日数を計算します。

#! /usr/bin/gawk -f
# sub_days.awk - print sub days

BEGIN {
    target = "2008/7/1";

    split(target, arr_target, /\//);
    target_sec = mktime(arr_target[1] " " arr_target[2] " " arr_target[3]\
                        " 0 0 0");
    print int(target_sec / 24 / 60 / 60);
}

実行してみます。

$ gawk -f sub_days.awk
14060

もしも変数 target が今であるならば、nawk などで srand() の戻り値がエポック秒を返すことから以下のようにすることもできます。 処理系によってはエポック秒を返さないこともありますので注意してください。

#! /usr/bin/gawk -f
# sub_days2.awk - print past days from epoch time

BEGIN {
    srand();
    now = srand();
    print int(now / 24 / 60 / 60);
}

実行してみます。

$ gawk -f sub_days2.awk
14071

ただし、この場合には環境変数 TZ を考慮しませんので、時差がある場合には注意する必要があります。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png