天天看点

求一天是一年中的第几天

CopyRight: 本来属于原创,您可以任意修改,传播,以及商业用途,需注明来自本博客,希望对您有用!

                     from: http://blog.csdn.net/wanfustudio    author: wanfustudio

Question: 经常在csdn上看到问这样一类问题:

    1.tm_hour如何计算一年中第多少天使星期几

    2.指定的某年某月某日是第几天

    3.一个日期加上一个偏移是哪一天

    4.......

    这样的问题还有很多不一一赘述

#include <stdio.h>

#include <string.h>

#include <time.h>

const char *Week[]=

{

 "星期天",

 "星期一",

 "星期二",

 "星期三",

 "星期四",

 "星期五",

 "星期六"

};

#if 0

 struct tm {

        int tm_sec;    

        int tm_min;    

        int tm_hour;   

        int tm_mday;   

        int tm_mon;    

        int tm_year;   

        int tm_wday;   

        int tm_yday;   

        int tm_isdst;  

        };

#endif

void GetWeekDay(int year,int num);

void GetSomeDay(int year, int mon, int day);

void GetNextTime(int year, int mon, int day,int num);

int   main()

{

 GetWeekDay(2007,337);

 GetSomeDay(2007,12,4);

 GetNextTime(2007,12,4,30);

 return   0;

}

void GetSomeDay(int year, int mon, int day)

{

 time_t t;//存储需要计算时间距1900的秒数

    struct tm test ;//填充这个结构

 memset(&test, 0, sizeof(tm));//先清空下

 test.tm_year = year - 1900;

 test.tm_mon = mon -1;

 test.tm_mday = day ;

 t = mktime(&test);// 转换成秒

 struct tm  *now = localtime(&t);//再转回tm

 printf("%d/n", now->tm_yday);//第几天

 printf("%s/n", Week[now->tm_wday]);//星期几

}

void GetNextTime(int year, int mon, int day,int num)

{

 struct tm now, tmp;

 time_t  t;

 memset(&now, 0 , sizeof(struct tm));

 memset(&tmp, 0 , sizeof(struct tm));

 now.tm_year = year-1900; //指定年

 now.tm_mon  = mon -1;//指定月份

 now.tm_mday = day + num;  //指定是哪一天

 t = mktime(&now);//转换成秒

 struct tm *pNext = localtime(&t);

 printf("%s/n", asctime(pNext));//哪一天

 printf("%s/n", Week[pNext->tm_wday]);//星期几

}

void GetWeekDay(int year,int num)

{

 time_t t;//存储需要计算时间距1900的秒数

    struct tm test ;//填充这个结构

 memset(&test, 0, sizeof(tm));//先清空下

 test.tm_year = year - 1900;

 test.tm_mday = num +1;

 t = mktime(&test);// 转换成秒

 struct tm  *now = localtime(&t);//再转回tm

 printf("%d/n", now->tm_yday);//第几天

 printf("%s/n", Week[now->tm_wday]);//星期几

}