user-0 提问: C 日期转换

回复:
user: user-1
content: 引用 3 楼 zhao4zhong1 的回复://如何根据周，计算具体的日期？比如20132002，其中前4位2013是年份，后面的20是第20个周的意思，最后2为是一周的第几天之意。请问如何得出是2013年的哪一天？ #include <stdio.h> #include <time.h> void YYYYWWWD2YYYY_MM_DD(char *s) {     int y,w,d,d1;     time_t t;     struct tm st;     struct tm *ts;      sscanf(s,"%4d%2d%2d",&y,&w,&d);     y-=1900;w--;d--;     st.tm_year=y;     st.tm_mon=0;     st.tm_mday=1;     st.tm_hour=0;     st.tm_min=0;     st.tm_sec=0;     t=mktime(&st);     ts=localtime(&t);     d1=ts->tm_wday;if (d1==0) d1=7;d1--;     t+=(w*7+d-d1)*24*60*60;     ts=localtime(&t);     printf("%4d-%02d-%02d\n",ts->tm_year+1900,ts->tm_mon+1,ts->tm_mday); } int main() {     YYYYWWWD2YYYY_MM_DD("20130101");     YYYYWWWD2YYYY_MM_DD("20130102");     YYYYWWWD2YYYY_MM_DD("20130201");     YYYYWWWD2YYYY_MM_DD("20132002");     YYYYWWWD2YYYY_MM_DD("20135302");     YYYYWWWD2YYYY_MM_DD("20135303");     return 0; } //2012-12-31 //2013-01-01 //2013-01-07 //2013-05-14 //2013-12-31 //2014-01-01 //  正解！

user: user-2
content: 由周和一周里的某一天计算出一年的某一天，这个问题不是很复杂。需要把周数和天数获取到哦。

user: user-3
content: 仅供参考 #include <stdio.h> #include <stdlib.h>  int main() { 	int day = 0; 	char *s = "20132002"; 	char q[3]; 	q[0] = s[4]; 	q[1] = s[5];  	q[2] = '\0'; 	day +=  atoi(q) * 7; 	q[0] = s[6]; 	q[1] = s[7]; 	day +=  atoi(q); 	printf("%s 是这一年的第 %d 天!\n", s,day); 	return 0; }

user: user-4
content: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAX_SIZE 100  bool is_ryear(int year) {     if(((year % 4 == 0) && (year %100 != 0)) ||  (year % 400 == 0))         return true;     else         return false;  } int main() {     int year[MAX_SIZE ]= {0};     int mouth[MAX_SIZE ] = {0};     int day[MAX_SIZE ] = {0};     int answer[MAX_SIZE ] = {0};     int num;     int temp[MAX_SIZE] = {0};     int mouth_day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};     int i;      scanf("%d",&num);     for(i = 0 ; i < num; i++){         scanf("%d %d %d",&year[i],&mouth[i],&day[i]);     if(is_ryear(year[i]))     {      temp[i] = 1;     } }       for(i = 0 ; i < num; i++){     switch(mouth[i]){          case 12:             answer[i] = answer[i] + mouth_day[10] ;         case 11:              answer[i] = answer[i] + mouth_day[9] ;         case 10:              answer[i] = answer[i] + mouth_day[8]  ;         case 9:              answer[i] = answer[i] + mouth_day[7];         case 8:              answer[i] = answer[i] + mouth_day[6] ;         case 7:              answer[i] = answer[i] + mouth_day[5] ;         case 6:              answer[i] = answer[i] +  mouth_day[4];         case 5:              answer[i] = answer[i] + mouth_day[3] ;         case 4:              answer[i] = answer[i] +  mouth_day[2] ;         case 3:              answer[i] = answer[i] + mouth_day[1] + temp[i];         case 2:              answer[i] = answer[i] + mouth_day[0]  ;         case 1:              answer[i] = answer[i] + day[i];              break;         default:              break;     }  }      for(i = 0 ; i < num; i++)         printf("%d\n",answer[i]);         return 0; } 这个不是和 第几年的第几个月第几天的判定逻辑一样 只不过一周7天而已

user: user-1
content: //如何根据周，计算具体的日期？比如20132002，其中前4位2013是年份，后面的20是第20个周的意思，最后2为是一周的第几天之意。请问如何得出是2013年的哪一天？ #include <stdio.h> #include <time.h> void YYYYWWWD2YYYY_MM_DD(char *s) {     int y,w,d,d1;     time_t t;     struct tm st;     struct tm *ts;      sscanf(s,"%4d%2d%2d",&y,&w,&d);     y-=1900;w--;d--;     st.tm_year=y;     st.tm_mon=0;     st.tm_mday=1;     st.tm_hour=0;     st.tm_min=0;     st.tm_sec=0;     t=mktime(&st);     ts=localtime(&t);     d1=ts->tm_wday;if (d1==0) d1=7;d1--;     t+=(w*7+d-d1)*24*60*60;     ts=localtime(&t);     printf("%4d-%02d-%02d\n",ts->tm_year+1900,ts->tm_mon+1,ts->tm_mday); } int main() {     YYYYWWWD2YYYY_MM_DD("20130101");     YYYYWWWD2YYYY_MM_DD("20130102");     YYYYWWWD2YYYY_MM_DD("20130201");     YYYYWWWD2YYYY_MM_DD("20132002");     YYYYWWWD2YYYY_MM_DD("20135302");     YYYYWWWD2YYYY_MM_DD("20135303");     return 0; } //2012-12-31 //2013-01-01 //2013-01-07 //2013-05-14 //2013-12-31 //2014-01-01 //

user: user-5
content: 取字符串的的第五位和第六位，然后转换成int类型取，取得整周数！ 然后取最后一位转成int，得到这周的第几天，组合一起就好了！

user: user-6
content: 参考http://linux.chinaunix.net/techdoc/develop/2007/06/03/959192.shtml  引用 楼主 s373785346 的回复:如何根据周，计算具体的日期？比如20132002，其中前4位2013是年份，后面的20是第20个周的意思，最后2为是一周的第几天之意。请问如何得出是2013年的哪一天？