C/400 での曜日を求める方法を紹介する。
C言語では時間に関する関数が time.h によって
豊富に紹介されているので次のようなソースによって
求めることができる。
RPG ではまた別の方法が必要となるので
RPG による曜日の算出方法は「275. RPGで曜日を算出するには ?」を
参照して頂きたい。
【サンプル・ソース: TESTWEEK 】
0001.00 #include
0002.00 #include
0003.00 #include
0004.00 #include
0005.00
0006.00 #define TRUE 0
0007.00 #define FALSE -1
0008.00
0009.00 int GetDayOfWeek(int year, int month, int day);
0010.00 void DisplayWeek(int wday);
0011.00 void main(void){
0012.00 int year, month, day, week;
0013.00
0014.00 printf("** TESTWEEK : 曜日を求める **\n");
0015.00 getchar();
0016.00
0017.00 year = 2017;
0018.00 month = 04;
0019.00 day = 1;
0020.00 week = GetDayOfWeek(year, month, day);
0021.00
0022.00 /* 曜日の表示 */
0023.00 DisplayWeek(week);
0024.00 }
0025.00 /*********************************************/
0026.00 int GetDayOfWeek(int year, int month, int day)
0027.00 /*********************************************/
0028.00 {
0029.00 struct tm time_in, *local;
0030.00 time_t t;
0031.00
0032.00 /* 年月日を入力 */
0033.00 time_in.tm_year = year - 1900; /* 年 */
0034.00 time_in.tm_mon = month - 1; /* 月 */
0035.00 time_in.tm_mday = day; /* 日 */
0036.00
0037.00 /* 時分秒曜日を適当に入力 */
0038.00 time_in.tm_hour = 1; /* 時 ( 適当に入力 ) */
0039.00 time_in.tm_min = 0; /* 分 ( 適当に入力 ) */
0040.00 time_in.tm_sec = 0; /* 秒 ( 適当に入力 ) */
0041.00 time_in.tm_wday = 0; /* 曜日 ( 適当に入力 ) */
0042.00 time_in.tm_yday = 0; /* 1 月 1 日からの日数 ( 適当に入力 ) */
0043.00
0044.00 /* mktime 関数で変換 */
0045.00 if((t = mktime(&time_in) ) == (time_t)(-1) ) {
0046.00 return -1;
0047.00 }
0048.00
0049.00 /* 地方時に変換 */
0050.00 local = localtime(&t);
0051.00
0052.00 return local->tm_wday;
0053.00 }
0054.00 /*************************/
0055.00 void DisplayWeek(int wday)
0056.00 /*************************/
0057.00 {
0058.00 char weeks[][16] = {
0059.00 " 日曜日 ",
0060.00 " 月曜日 ",
0061.00 " 火曜日 ",
0062.00 " 水曜日 ",
0063.00 " 木曜日 ",
0064.00 " 金曜日 ",
0065.00 " 土曜日 "
0066.00 };
0067.00
0068.00 printf("%s\n", weeks[wday]);
0069.00 }

【解説】
この例では 2017/04/01 の曜日を求めている。
2017/04/01 はこの原稿を書いている日であり土曜日である。
