日期计算星期几及c#代码实现

本文介绍两种快速计算任意日期星期数的方法:一是通过日期代码、月份代码及年份代码相加后除以7得出余数;二是利用蔡勒公式进行计算。同时提供了C#语言实现这两种方法的具体代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日期代码+月份代码+年份代码
就可以秒算任意年份任意日期的星期数
方法
1、日期代码指的是日期数,如3月18号,日期代码为18。4月7号,日期代码为7。
2、月份代码(需要小小记忆)
五月 是 0
八月 是 1
二月 三月 十一月 是 2
六月 是 3
九月 十二月 是4
四月 七月 是5
一月 十月 是 6
如果遇到闰年 则二月代码变为1,一月代码变为5,其它不变。即,非闰年的月份代码为622503 514624,闰年的月份代码为512503 514624。
3、年份代码
举个例子 2010年的代码,我们用尾数10除以4(忽略余数)再加上10得到数字12,再用12除以7,得到的余数5就是2010年的代码。
也就是说,心算出2000到2099任意年份的代码,只需将其后两位数X除以4(忽略余数),然后与X相加,并除以7就可以了,得到的余数就是其年份代码。10年的年份代码是5,11年年份代码为6。
4、秒算任意日期的星期数
如,我们算一下2010年4月25日
日期代码25
月份代码5
年份代码5
日期代码+月份代码+年份代码=25+5+5=35
35是7的倍数,所以2010年4月25日是星期日
再比如算一下2010年10月1日
日期代码1
月份代码6
年份代码5
日期代码+月份代码+年份代码=1+6+5=12
12除以7余5,所以2010年10月1日是星期五
如果得到的代码和是小于7的数,那么此数直接是星期数
如果得到的代码和是大于7的数,那么将该数除以7得到的余数为星期数。

方法二
原理:蔡勒公式
1、W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1 (其中[ ]为取整符号)
2、其中,W是所求日期的星期数.如果求得的数大于7,可以减去7的倍数,直到余数小于7为止.c是公元年份的前两位数字,y是已知公元年份的后两位数字;m是月数,d是日数.方括[ ]表示只截取该数的整数部分。
3、还有一个特别要注意的地方:所求的月份如果是1月或2月,则应视为前一年的13月或14月.所以公式中m 的取值范围不是1-12,而是3-14.

下面时使用c#实现计算过程

方法1

您可以使用.NET框架中的DateTimeDayOfWeek枚举类型来实现这个功能。以下是一个简单的C#代码示例,它将日期转换为星期几:

using System;  
  
class Program  
{  
    static void Main()  
    {  
        // 输入日期  
        Console.Write("请输入日期 (格式:YYYY-MM-DD):");  
        string dateInput = Console.ReadLine();  
        DateTime date = DateTime.Parse(dateInput);  
  
        // 计算星期几  
        DayOfWeek dayOfWeek = date.DayOfWeek;  
  
        // 输出结果  
        switch (dayOfWeek)  
        {  
            case DayOfWeek.Monday:  
                Console.WriteLine("星期一");  
                break;  
            case DayOfWeek.Tuesday:  
                Console.WriteLine("星期二");  
                break;  
            case DayOfWeek.Wednesday:  
                Console.WriteLine("星期三");  
                break;  
            case DayOfWeek.Thursday:  
                Console.WriteLine("星期四");  
                break;  
            case DayOfWeek.Friday:  
                Console.WriteLine("星期五");  
                break;  
            case DayOfWeek.Saturday:  
                Console.WriteLine("星期六");  
                break;  
            case DayOfWeek.Sunday:  
                Console.WriteLine("星期日");  
                break;  
            default:  
                Console.WriteLine("输入的日期格式不正确");  
                break;  
        }  
    }  
}

这段代码首先从用户那里获取一个日期字符串,然后使用DateTime.Parse方法将其转换为DateTime对象。然后,它使用DayOfWeek属性来获取该日期是星期几。最后,它使用一个switch语句来输出结果。

方法2

你想要手动实现这个计算过程,我们需要了解如何使用Zeller公式,这是一个用于计算给定日期是星期几的算法。

对应代码

public static string GetDayOfWeek(int year, int month, int day)  
{  
    if (month < 3)  
    {  
        year -= 1;  
        month += 12;  
    }  
  
    int h = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;  
  
    // Zeller's Congruence algorithm to find the day of week  
    string[] weekDays = { "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };  
    return weekDays[h];  
}

这个函数接受年、月和日作为参数,然后使用Zeller公式来计算给定日期是星期几。这个公式的结果是一个介于0到6之间的整数,分别对应星期日到星期六。然后我们使用一个字符串数组来表示星期几,并返回对应的字符串。

例如,如果你想要找出2023年6月17日是星期几,你可以这样调用这个函数:

string dayOfWeek = GetDayOfWeek(2023, 6, 17);  
Console.WriteLine(dayOfWeek);  // 输出:Saturday

特此记录

anlog

2023年11月22日

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值