24、判断闰年及给定日期求星期几

1、判断闰年的条件是下面二条之一:

1)年份能被4整除,但不能被100整除; 如1900就不是闰年

2)年份可以被400整除。如2000年就是闰年

printf(a%(a%100?4:400)?"NO":"YES");

2、给定日期求星期几:

C语言根据日期判断星期几(使用基姆拉尔森计算公式)

算法如下:

基姆拉尔森计算公式

W=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

在公式中d表示日期中的日数,m表示月份数,y表示年数。

注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

程序如下:

#include"stdio.h"

voidCaculateWeekDay(int y,int m, int d)

{

    if(m==1||m==2) {

        m+=12;

        y--;

                  }//if

 intiWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;

    switch(iWeek)

    {

    case 0: printf("周一\n");break;

    case 1: printf("周二\n");break;

    case 2: printf("周三\n");break;

    case 3: printf("周四\n");break;

    case 4: printf("周五\n");break;

    case 5: printf("周六\n");break;

    case6: printf("周日\n"); break;

    }//switch

}//Calculate

 

intmain()

{

    int year=0,month=0,day=0;

   printf("请输入日期:\n 格式为:1900,1,1\n");

    char temp = '1';

    while (temp != '0')

    {

       scanf("%d,%d,%d",&year,&month,&day);

        scanf("%c",&temp);

        CaculateWeekDay(year,month,day);

       printf("输入0退出,其它继续:");

        scanf("%c",&temp);

    }//while

}//main

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,对于您的问题,我可以提供以下回答: 对于判断一个日期是否合法,可以使用 Python 中的 datetime 模块来实现。具体代码如下: ```python import datetime def is_valid_date(date_str): try: datetime.datetime.strptime(date_str, '%Y-%m-%d') return True except ValueError: return False ``` 该函数接受一个字符串类型的日期,判断其是否为合法日期,如果是则返回 True,否则返回 False。 对于判断该年是否闰年,可以使用以下代码: ```python def is_leap_year(year): if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: return True else: return False ``` 该函数接受一个年份,判断该年是否为闰年,如果是则返回 True,否则返回 False。 对于判断该日期是当年第几天、当月第几天、当周第几天,可以使用以下代码: ```python def get_day_info(date_str): date = datetime.datetime.strptime(date_str, '%Y-%m-%d') year_start = datetime.datetime(date.year, 1, 1) year_days = (date - year_start).days + 1 month_days = date.day week_days = date.weekday() + 1 return year_days, month_days, week_days ``` 该函数接受一个字符串类型的日期,返回该日期在当年中是第几天、在当月中是第几天、在当周中是第几天。 对于判断起始日期与结束日期是否合法且结束日期是否早于起始日期,可以使用以下代码: ```python def is_valid_range(start_date_str, end_date_str): start_date = datetime.datetime.strptime(start_date_str, '%Y-%m-%d') end_date = datetime.datetime.strptime(end_date_str, '%Y-%m-%d') if start_date > end_date: return False else: return True ``` 该函数接受两个字符串类型的日期,判断起始日期是否早于结束日期,如果是则返回 True,否则返回 False。 对于输出结束日期与起始日期之间的相差的天数、月数、年数,可以使用以下代码: ```python def get_date_diff(start_date_str, end_date_str): start_date = datetime.datetime.strptime(start_date_str, '%Y-%m-%d') end_date = datetime.datetime.strptime(end_date_str, '%Y-%m-%d') delta = end_date - start_date days = delta.days months = (end_date.year - start_date.year) * 12 + (end_date.month - start_date.month) years = end_date.year - start_date.year return days, months, years ``` 该函数接受两个字符串类型的日期,返回结束日期与起始日期之间的相差的天数、月数、年数。 希望以上回答能够帮助您解决问题。 ### 回答2: 给定一个日期,判断是否为合法日期,可以根据以下几点来判断: 1. 年份是否大于等于1 2. 月份是否在1到12之间 3. 如果月份是4、6、9、11,则日期是否在1到30之间 4. 如果月份是1、3、5、7、8、10、12,则日期是否在1到31之间 5. 如果月份是2,则需要判断是否为闰年。闰年的条件是:年份能被4整除但不能被100整除,或者年份能被400整除。如果是闰年,则日期在1到29之间,否则日期在1到28之间。 判断该年是否闰年,可以根据上述闰年的条件进行判断。 判断日期是当年第几天,可以先根据月份确定前几个月的天数之和,然后加上当月的日期。 判断日期是当月第几天,就是直接返回日期的值。 判断日期是当周第几天,可以使用日期所在星期几的值来判断,星期一到星期日分别用1到7表示。 给定起始日期与结束日期,判断日期是否合法且结束日期是否早于起始日期,可以先利用上述的合法日期判断方法判断起始日期和结束日期是否合法,如果合法,则可以直接比较两个日期的大小,如果结束日期早于起始日期,则输出不合法的消息。 如果起始日期和结束日期均合法,则可以计算出两个日期相差的天数、月数和年数,可以使用日期间隔计算的算法来实现。然后根据具体需来决定输出的格式。比如,可以返回相差的天数,相差的月数,相差的年数等等。 ### 回答3: 判断一个日期是否合法,可以按照以下步骤进行: 1. 首先确定年份是否合法。年份必须大于0。 2. 再判断月份是否合法。月份必须在1到12之间。 3. 接着判断日期是否合法。根据月份和年份,判断日期是否在合理范围内。 - 对于平年,2月份的日期范围是1到28。 - 对于闰年,2月份的日期范围是1到29。 - 其他月份的日期范围根据实际情况确定,如1月份是1到31,3月份是1到31,以此类推。 4. 如果日期合法,则判断该年是否闰年。闰年的判定规则是: - 能被4整除但不能被100整除的年份是闰年。 - 能被400整除的年份也是闰年。 5. 计算该日期是当年第几天。根据年份、月份和日期,累加之前的天数即可。 6. 计算该日期是当月第几天。直接获取日期的值即可。 7. 计算该日期是当周第几天。可以借助日期库提供的函数,获取该日期是星期几。 对于给定的起始日期和结束日期的判定,可以按照以下步骤进行: 1. 首先判断起始日期和结束日期是否合法,按照上述步骤进行判断。 2. 如果起始日期和结束日期均合法,则判断结束日期是否早于起始日期。 3. 如果结束日期早于起始日期,则输出错误信息。 4. 否则,根据起始日期和结束日期的差值计算相差的天数、月数、年数。可以通过日期库提供的函数,获取两个日期之间的差值。 以上是回答的大致思路,根据具体实现的方式和环境的不同,可以使用不同的编程语言和工具来完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值