曜日の特定日
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int dayofweek(int year, int month, int day){
struct tm t;
t.tm_year = year -1900; //年 1900~
t.tm_mon = month - 1; //月 0-11
t.tm_mday = day; //日 1-31
t.tm_hour = 0; //時 0-23
t.tm_min = 0; //分 0-59
t.tm_sec = 0; //秒 0-61
t.tm_isdst = -1; //夏時間 無効なら0
if(mktime(&t) == -1) return(-1); //変換失敗
return (t.tm_wday); //曜日返却添字返却
}
int main(int argc, char *argv[]){
//・・・課題の仕様を満たすプログラムの本体とその必要な宣言
int y, m, d, w;
char *ws[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
y= atoi(argv[1]);
m= atoi(argv[2]);
d= atoi(argv[3]);
w= dayofweek(y, m, d);
if(w != -1) printf("%s\n", ws[w]);
return 0;
}
⇒変数y, m, d, w;
指定日の取得
y= atoi(argv[1]);
m= atoi(argv[2]);
d= atoi(argv[3]);
曜日を求める
wday= dayofweek(y, m, d);
int dayofwek(int year, int month, int day){
struct tm t;
t.tm_year = year -1900; 年 1900~
t.tm_mon = month - 1; 月 0-11
t.tm_mday = day; 日 1-31
t.tm_hour = 0; 時 0-23
t.tm_min = 0; 分 0-59
t.tm_sec = 0; 秒 0-61
t.tm_isdst = -1; 夏時間 無効なら0
if(mktime(&t) == -1) return(-1); 変換失敗
return (t.tm_wday); 曜日返却
}
⇒返却値が-1でなければ曜日の添字が返ってくるので表示指定して出力
localtime関数 (time_t型のエポック秒) ⇒tm構造体を返す
mktime関数 (tm構造体) ⇒tm_t型のエポック秒を返す(tm構造体調整)
tm構造体をmktime関数に渡した時点でメンバの値が調整されるので
そのままt.tm_wdayで参照しても曜日の添え字が返ってくる
構造体 tm はtime.h の中で宣言され、以下のような内容
struct tm {
int tm_sec; 秒 [0-61] 最大2秒までのうるう秒を考慮
int tm_min; 分 [0-59]
int tm_hour; 時 [0-23]
int tm_mday; 日 [1-31]
int tm_mon; 月 [0-11] 0から始まることに注意
int tm_year; 年 [1900からの経過年数]
int tm_wday; 曜日 [0:日 1:月 ... 6:土]
int tm_yday; 年内の通し日数 [0-365] 0から始まることに注意
int tm_isdst; 夏時間フラグ
[夏時間を採用しているときに正、採用していないときに 0、この情報が得られないときに負]