今月が何日まであるか

今月が何日まであるかを表示する - 素人がプログラミングを勉強するブログにインスパイヤされて、今月が何日まであるかを表示してみます。

基本的に gawk の機能を用いていますが、上記 URL の手法とは異なります。

#! /usr/local/bin/gawk -f
# days_of_this_month.awk
# 今月が何日まであるか表示する
# usage: gawk -f days_of_this_month.awk

BEGIN {
    year    = strftime("%Y") + 0;
    month   = strftime("%m") + 0;
    split("31 28 31 30 31 30 31 31 30 31 30 31", month_length);

    if (is_leap(year) && month == 2) {
        print month " 月は " month_length[month] + 1 " 日まで。";
    } else {
        print month " 月は " month_length[month] " 日まで。";
    }
}

# is_leap():    閏年かどうかの判定
#   in:     年 (year)
#   out:    閏年なら 1、そうでなければ 0 を返す
function is_leap(year) {
    if ((year % 4) == 0 && (year % 100) != 0 || (year % 400) == 0) {
        return 1;
    } else {
        return 0;
    }
}

実行してみます。

$ date
Mon Aug 31 22:42:09 JST 2009

$ gawk -f days_of_this_month.awk
8 月は 31 日まで。

上述の URL と同じ手法で gawk を使うと以下のようになります。

#! /usr/local/bin/gawk -f
# days_of_this_month_2.awk
# 今月が何日まであるか表示する
# usage: gawk -f days_of_this_month_2.awk

BEGIN {
    year    = strftime("%Y") + 0;
    month   = strftime("%m") + 0;

    print strftime("%d", mktime(year " " month + 1 " 1 0 0 0") - 60 * 60 * 24);
}

実行結果も同じです。

$ date
Mon Aug 31 22:49:10 JST 2009

$ gawk -f days_of_this_month_2.awk
31

後者の方は次の月の 1 日から 1 日分を引いて計算しています。

tag_gawk.pngtag_gawk.png