WeekDay计算函数

本文介绍了公元纪年的由来及如何使用一个简单的C语言函数计算任意一天是星期几的方法。该函数考虑了平年与闰年的差异,并通过累加每个月的天数来确定输入日期对应的星期。

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

公元纪年的来历     公元是“公历纪元”的简称,是国际通行的纪年体系。以传说中耶稣基督的生年为公历元年(相当于中国西汉平帝元年)。

    由于公元纪年的起点是公元1年,而没有“公元0年”,所以大多数对公元纪年有充分了解的科学家和世界上大多数权威天文机构,都明确支持21世纪始于2001年的说法。  

     公元1年1月1日是星期一。因此我们可以用某天的年月日推算出这一天是星期几(WEEKDAY)。

typedef unsigned long ULONG;

typedef unsigned int        UINT;

/*

参数输出:1~7 对应星期一至星期天

*/


typedef unsigned long ULONG;

typedef unsigned int        UINT;

int GetWeekDay(int nYear, int nMonth, int nDay)
{  
    ULONG lWeekDay = 0;    //要返回的weekday
    ULONG lYear = nYear;     
    ULONG lMonth = nMonth;  
    ULONG lDay = nDay;
    ULONG lDayCount = 0 ;   //从1月1日到上月底的累计天数

    UINT uArrMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};

    for(unsigned int i=0;i<(lMonth-1);++i)   
          lDayCount += uArrMonth[i];    

    if ( nMonth > 2)
    {
        if ( ( (lYear%4 == 0) && (lYear%100 != 0 ) ) || (lYear%400 == 0) )  //计算闰年
              ++lDayCount ;   
    }

    lWeekDay = ((lYear-1)*365 + (lYear-1)/4 - (lYear-1)/100 + (lYear-1)/400 + lDayCount + lDay )%7;

    if (lWeekDay==0)       //   
        lWeekDay = 7;           //星期几

    return (int)lWeekDay;
}

 

     其实不需用long数据类型来计算,完全可以采用int型。但用了long型可以保证到一百万年后,该函数仍然正确。

 

### WEEKDAY 函数的详细介绍 #### 基本概念 `WEEKDAY` 是 Excel 中的一个日期函数,用于返回指定日期对应的星期几。其返回值是一个整数,范围从 1 到 7 或者其他自定义设置,具体取决于第二个参数的选择[^1]。 --- #### 函数语法 `WEEKDAY(serial_number, [return_type])` - **serial_number**: 表示要计算的日期,可以是直接输入的日期字符串或者单元格中的日期。 - **return_type (可选)**: 定义一周的第一天以及返回值的形式,默认值为 1。以下是 `return_type` 的常见取值及其含义: | Return_Type | 结果解释 | |-------------|------------------------------| | 1 | 默认模式,周日到周六对应 1 至 7 | | 2 | 周一至周日对应 1 至 7 | | 3 | 周一至周日对应 0 至 6 | 如果未提供此参数,则默认采用第一个选项(即 Sunday=1)[^2]。 --- #### 示例代码展示 假设 A1 单元格存储了一个有效日期(如 `"2023/9/18"`),下面是一些常见的用法实例: ```excel =WEEKDAY(A1) ' 返回结果基于默认模式(Sunday=1),对于2023年9月18日(周一), 输出应为 2. =WEEKDAY(A1, 2) ' 设置 Monday=1 模式下,同样日期会得到输出 1. =WEEKDAY(A1, 3) ' 此种情况下,Monday 对应的是数值 0 而是 1. ' 如果希望显示中文形式的结果比如 “星期一”,则需结合 TEXT 函数实现: =TEXT(WEEKDAY(A1, 2),"aaaa") ' 这里 aaaa 将数字转换成了相应的汉字描述,最终呈现效果将是“星期一” ``` 上述例子展示了如何灵活调整 `WEEKDAY` 函数的行为来适应同需求,并且通过嵌套调用来获得更直观的文字表达方式[^3]。 --- ### 注意事项 当处理跨区域数据需要注意本地化差异可能影响实际表现;另外,在构建复杂公式之前务必确认基础日期格式无误以免引发错误运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值