2002-04-27

更正して(笑)、今日が1年のうちで第何週かという問題に真面目に挑んでみました。

void yweek(TX *text)
{
    int diff[] = { 0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4 };
    int year = timeGetYear();
    int month = timeGetMonth();
    int day = timeGetDay();
    int yday = (month - 1) * 30 + diff[month - 1] + day + (year % 4 ? 0 : 1);
    int dayofweek_Jan1st = (7 + timeGetDayofweek() - (yday - 1) % 7) % 7;
    information("今日は第 %d 週です。", (yday - 1 + dayofweek_Jan1st) / 7 + 1);
}

TX-Cを書いてかないとここは存在意義がなくなっちゃいますし。

追記。これでは不十分ということに電車の中で気づきました。1月1日の曜日の分だけずらさないと、日曜日にはじまり土曜日に終わるセットとして第何週かは正しく求められません。1月1日の曜日を求める一行を挿入し、最後の計算式を修正。なんかもっと簡単にできそうなんですけど……。