定义函数给出任意一天是星期几

如题所述

第1个回答  2011-05-25
输入年月日,输出 星期几。
调用 int YMD_2_WeekDay(int Y, int M, int D)

#include <stdio.h>
#include <time.h>
char *WeekDayName[]={" ","Mon","Tue","Wen","Thu","Fri","Sat","Sun"};
int YMD_2_JD(int Y, int M, int D){
const short MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int JD,i;
JD=D;
for (i=1;i<M;i++) JD+=MonthDay[i];
if ((Y%4==0)&&(Y%100!=0)||(Y%400==0) && M>2) JD++;
return JD;
}

int YMD_2_WeekDay(int Y, int M, int D){
int offset,jd,weekD;
offset = ((Y-1)+(Y-1)/4-(Y-1)/100+(Y-1)/400) % 7 ;
jd = YMD_2_JD(Y,M,D);
weekD = (jd + offset) % 7;
return weekD;
}

void main()
{
int y=2011,m=5,d=31;
int dd;
dd = YMD_2_WeekDay(y,m,d);
printf("%4d-%02d-%02d is %s ", y,m,d,WeekDayName[dd] );
}
第2个回答  2011-05-25
/*-----------------------------------------------------------------*\
author: wanfustudio
mail : wanfu.liu@163.com
Rights: 任意拷贝,修改,传播包括商业使用
Q & A :
如何疑问,以及想法,不满足的需求
欢迎来函!!!
\*-----------------------------------------------------------------*/

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>

/*这段是注释,放在此处用以说明各个成员的含义,在time.h中定义*/
#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

/*-----------------------------------------------------------------*\
全局变量
\*-----------------------------------------------------------------*/

/* 数组与下面tm结构中定义的tm_wday取值范围相对应 */
const char *Week[]=
{
"星期天",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
};

/*-----------------------------------------------------------------*\
函数声明
\*-----------------------------------------------------------------*/

/* 一年中第X天是星期几 */
void GetWeekDay(int year,int num);

/* X年X月X日是一年中的第X天,星期几 */
void GetSomeDay(int year, int mon, int day);

/* X年X月X日再过X天是一年中的第X天,星期几 */
void GetNextTime(int year, int mon, int day,int num);

/* X年某月末日到X年X月某日有多少天 */
int GetDistBetweenTwoDays(int year, int mon, int day, int year2, int mon2, int day2);

/*-----------------------------------------------------------------*\
函数实现
\*-----------------------------------------------------------------*/

void GetSomeDay(int year, int mon, int day)
{
time_t t;//存储需要计算时间距1900的秒数
struct tm test ;//填充这个结构
struct tm *now = NULL;

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

test.tm_year = year - 1900;
test.tm_mon = mon -1;
test.tm_mday = day ;

t = mktime(&test);// 转换成秒
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 *pNext= NULL;
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);//转换成秒

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 ;//填充这个结构
struct tm *now = NULL;

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

test.tm_year = year - 1900;
test.tm_mday = num +1;

t = mktime(&test);// 转换成秒
now = localtime(&t);//再转回tm

printf("%d\n", now->tm_yday);//第几天
printf("%s\n", Week[now->tm_wday]);//星期几
}

int GetDistBetweenTwoDays(int year, int mon, int day, int year2, int mon2, int day2)
{
int distance = 0;
struct tm now, tmp;
time_t t1,t2;
long diff = 0;

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; //指定是哪一天

tmp.tm_year = year2-1900;
tmp.tm_mon = mon2 -1;
tmp.tm_mday = day2;

t1 = mktime(&now);// 转换成秒
t2 = mktime(&tmp);

diff = (long)fabs(difftime(t1, t2)); /* 算绝对值(秒) */

distance = diff / 3600 / 24; /* 转成天 */

printf("相隔 %d 天\n", distance);

return distance;
}

/*-----------------------------------------------------------------*\
函数测试
\*-----------------------------------------------------------------*/

int main()
{
GetWeekDay(2007,337);
GetSomeDay(2007,12,4);
GetNextTime(2005,12,4,100);
GetDistBetweenTwoDays(2011, 4, 30, 2011, 5, 2);

return 0;
}

/*-----------------------------------------------------------------*\
author: wanfustudio
mail : wanfu.liu@163.com
如何疑问,以及想法,不满足你的需求
欢迎来函!!!
\*-----------------------------------------------------------------*/本回答被提问者采纳

定义函数给出任意一天是星期几
输入年月日,输出 星期几。调用 int YMD_2_WeekDay(int Y, int M, int D)include <stdio.h> include char *WeekDayName[]={" ","Mon","Tue","Wen","Thu","Fri","Sat","Sun"};int YMD_2_JD(int Y, int M, int D){ const short MonthDay[]={0,31,28,31,30,31,30,3...

任意输入一天 输出是星期几
函数的意思是如果得到的值是1则是星期日,如果得到的值是2则是星期一,如果得到的值是3则是星期二,依次类推

根据日期判断星期几的四种方法
默认情况下,WEEKDAY函数返回1至7之间数值,其中星期日为1,星期一为2。通过设置return_type参数,可调整输出形式。示例:WEEKDAY(A1,1)。方法三:使用CHOOSE函数 结合weekday与choose函数,可根据特定需求显示星期几名称。例如:CHOOSE(WEEKDAY(A1), "星期天", "星期一", "星期二", "星期三", "...

如何算一年中的任意一天是星期几
case 3: weekstr="星期四"; break;case 4: weekstr="星期五"; break;case 5: weekstr="星期六"; break;case 6: weekstr="星期日"; break;}return weekstr;}具体请百科蔡勒公式

c语言:用自定义函数来实现任意输入一个日期,结果输出其星期几
y年m月d日,是第几天days啊?计算方法:days=mon[1]+mon[2]+.+mon[m-1]+d;mon[i]是第i个月的天数;同时要注意,mon[2]闰年29,否则28;给出代码吧,虽然这样对你其实么有什么好处、#includeintmain(){intmon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};inty,m,d,days;...

怎么利用JS计算某天是星期几呢?
接着,定义一个函数`pushbutton`用于处理表单提交。此函数先调用`checkNum`对年、月、日进行有效性检查。如果输入有效,函数将日期参数转换为整数,并调用`getDayOfWeek`函数来计算星期几。`getDayOfWeek`函数接收日期值作为参数,首先通过`Date.parse`方法将输入日期格式化,然后使用`new Array`创建一个包含...

如何用Excel计算出某一时间是星期几?
。这样,我们就能轻松判断B3的日期时间是否符合早间7:30的截止要求。这个小技巧不仅能帮助你管理日常任务的截止时间,还能提高工作效率。通过理解并熟练运用IF函数,你的Excel技能将更上一层楼。如果你在实际操作中遇到任何问题,随时可以查阅相关教程,或者在社区中寻求帮助。祝你在Excel的世界里游刃有余!

excel怎样用函数表示当天是星期几
在Excel中,可以使用函数来表示当天是星期几。具体可以使用“TEXT”函数结合“WEEKDAY”函数来实现。详细解释如下:一、使用WEEKDAY函数获取星期信息 Excel中的WEEKDAY函数可以返回一个数字,代表当前日期是星期几。比如,如果今天是星期一,那么WEEKDAY函数会返回数字1;如果是星期二,...

根据日期判断星期几的四种方法
方法三:CHOOSE函数的个性化选择对于定制输出,CHOOSE函数大显身手。例如,将weekday的1-7映射到“星期天”到“星期六”:=CHOOSE(WEEKDAY(A1), "星期天", "星期一", ..., "星期六")<\/。这样,你就可以根据实际需要定制星期显示。方法四:自定义格式的隐形魔法想让单元格保持原样,但显示时自动...

计算某一天是星期几的公式
2、公式为“(该月的指数+日数)÷7”,这种方法需要先知道或推算出该月的指数,例如1月份有31天,除以7之后余数是3,这个余数3就是2月份的指数。3、使用Excel的Weekday函数,其公式为“=WEEKDAY(serial_number,[return_type]),其中serial_number为日期,return_type为返回星期的格式,例如2代表...

相似回答
大家正在搜