C/400

122. C言語での曜日の算出方法

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 はこの原稿を書いている日であり土曜日である。