
4个回答
展开全部
这个程序太多了,随便帮你找一个:
---输入年,月,日:2000,3,1
答: 2000年3月1日是星期三.
---输入年,月,日:2008,4,20
答: 2008年4月20日是星期日.
---输入年,月,日:0
年月日数字用逗号隔开. 想结束的时候输入一个0就可以了.
int Ymd2Wday(int year, int month, int days)
{
static int mdays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
int i, y = year - 1;
for (i=0; i<month; ++i) days += mdays[i];
if (month>2) { // Increment date if this is a leap year after February
if (((year%400)==0) || ((year&3)==0 && (year%100))) ++days;
}
return (y+y/4-y/100+y/400+days)%7;
}
int main()
{
int y,m,d,w;
static char* wday[]={ "日","一","二","三","四","五","六" };
printf("---输入年,月,日:");
while (scanf("%d,%d,%d", &y, &m, &d)==3) {
w = Ymd2Wday(y,m,d);
printf("答: %d年%d月%d日是星期%s.\n\n---输入年,月,日:", y, m, d, wday[w]);
}
return 0;
}
---输入年,月,日:2000,3,1
答: 2000年3月1日是星期三.
---输入年,月,日:2008,4,20
答: 2008年4月20日是星期日.
---输入年,月,日:0
年月日数字用逗号隔开. 想结束的时候输入一个0就可以了.
int Ymd2Wday(int year, int month, int days)
{
static int mdays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
int i, y = year - 1;
for (i=0; i<month; ++i) days += mdays[i];
if (month>2) { // Increment date if this is a leap year after February
if (((year%400)==0) || ((year&3)==0 && (year%100))) ++days;
}
return (y+y/4-y/100+y/400+days)%7;
}
int main()
{
int y,m,d,w;
static char* wday[]={ "日","一","二","三","四","五","六" };
printf("---输入年,月,日:");
while (scanf("%d,%d,%d", &y, &m, &d)==3) {
w = Ymd2Wday(y,m,d);
printf("答: %d年%d月%d日是星期%s.\n\n---输入年,月,日:", y, m, d, wday[w]);
}
return 0;
}
展开全部
这个我最在行,呵呵
求一天是一年中的第几天收藏
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]);//星期几
}
求一天是一年中的第几天收藏
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]);//星期几
}
参考资料: http://blog.csdn.net/wanfustudio/archive/2007/12/03/1914352.aspx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
利用天数差除7取余来解
或者。。。动用头文件里的时间类。。。
或者。。。动用头文件里的时间类。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我很懒的```
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询