求一天是一年中的第几天

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;     /* seconds after the minute - [0,59] */
        int tm_min;     /* minutes after the hour - [0,59] */
        int tm_hour;    /* hours since midnight - [0,23] */
        int tm_mday;    /* day of the month - [1,31] */
        int tm_mon;     /* months since January - [0,11] */
        int tm_year;    /* years since 1900 */
        int tm_wday;    /* days since Sunday - [0,6] */
        int tm_yday;    /* days since January 1 - [0,365] */
        int tm_isdst;   /* daylight savings time flag */
        };
#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]);//星期几
}


   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值