C语言使用蔡勒公式判断日期的星期

news2025/1/20 1:58:05

引言

在日常编程中,处理日期和时间是一个常见的任务。而了解一个特定日期是星期几,是许多应用程序中的一个基本需求。本篇博客将深入解析一个用于计算星期的 C 语言函数。

代码概览

这个函数使用了蔡勒公式来实现,蔡勒公式(Zeller's Congruence)是一种通过计算日期的数学公式来确定该日期是星期几的算法。它接受三个参数:年份(y)、月份(m)、日期(d)。

void CaculateWeekDay(int y, int m, int d) {
    if (m == 1 || m == 2) {
        m += 12;
        y--;
    }
    int iWeek = (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;
        case 6:
            printf("星期日\n");
            break;
    }
}

代码解析

  1. 月份调整

    if (m == 1 || m == 2) {
        m += 12;
        y--;
    }
    

    这一部分处理了月份的调整。在这个函数中,将 1 月和 2 月看作前一年的 13 月和 14 月,因此需要将月份加 12,同时将年份减 1。

  2. 计算星期

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

    这一行是核心的星期计算公式。通过一系列数学运算,将给定日期转换为一个数字,然后取模 7,得到一个 0 到 6 的结果,分别对应星期一到星期日。

  3. 星期输出

    switch (iWeek) {
        // cases for each day of the week
    }
    

    最后,通过 switch 语句根据计算得到的星期数输出对应的星期几。

使用示例

int main() {
    CaculateWeekDay(2023, 1, 1);  // 输出:星期日
    CaculateWeekDay(2023, 12, 25);  // 输出:星期一
    // 可以根据需要调用该函数并传入不同的日期
    return 0;
}

蔡勒公式

蔡勒(Zeller)公式是一种用于计算一个给定日期是星期几的数学公式。它由德国数学家克里斯蒂安·蔡勒(Christian Zeller)于1883年提出。该公式基于一种称为Zeller的紧缩公式的变体。这个公式适用于格里高利历的日期,即我们常用的日历系统。

蔡勒公式的一般形式如下:

[ h = (q + \left\lfloor\frac{​{13(m+1)}}{5}\right\rfloor + K + \left\lfloor\frac{K}{4}\right\rfloor + \left\lfloor\frac{J}{4}\right\rfloor - 2 \times J) \mod 7 ]

其中:

  • ( h ) 是星期几的数值,0 表示星期六,1 表示星期天,以此类推。
  • ( q ) 是月份中的日期。
  • ( m ) 是月份,对于蔡勒公式来说,1 月和 2 月要视为前一年的 13 月和 14 月。
  • ( K ) 是年份的最后两位数。
  • ( J ) 是年份的前两位数。

在具体的代码中,上面提供的函数就是使用了蔡勒公式来计算给定日期是星期几。函数接受年份(y)、月份(m)和日期(d)作为参数,然后输出相应的星期几。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1339901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

启明智显开源项目分享|基于Model 3c芯片的86中控面板ZX3D95CM20S-V11项目软硬件全开源

前言: 本文为4寸 480*480 RGB接口IPS全面触屏的86中控面板(RT-ThreadLVGL)软硬件开源干货内容,该项目是综合性非常强的RTOS系列项目!项目主控芯片使用 Model 3c,整体实现了简化版本的86中控面板的功能需求…

EDA巨头千亿级收购案谈判中 | 百能云芯

近期传出消息,电子设计自动化(EDA)领域的巨头新思科技(Synopsys)已向计算机辅助工程(CAE)软件行业的领导者安世(Ansys)递交了一份收购要约。据悉,新思科技的报…

快速排序:高效分割与递归,排序领域的王者算法

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 📋 前言 快速排序这个名词,快排之所以叫快排肯定是有点东西的。他在处理大规模数据集时表现及其…

处理urllib.request.urlopen报错UnicodeEncodeError:‘ascii‘

参考:[Python3填坑之旅]一urllib模块网页爬虫访问中文网址出错 目录 一、报错内容 二、报错截图 三、解决方法 四、实例代码 五、运行截图 六、其他UnicodeEncodeError: ascii codec 问题 一、报错内容 UnicodeEncodeError: ascii codec cant encode charac…

缓存和缓冲的区别

近期被这两个词汇困扰了,感觉有本质的区别,搜了一些资料,整理如下 计算机内部的几个部分图如下 缓存(cache) https://baike.baidu.com/item/%E7%BC%93%E5%AD%98 提到缓存(cache),就…

【LeetCode-剑指offer】--3.比特位计数

3.比特位计数 class Solution {public int[] countBits(int n) {int[] bites new int[n 1];for(int i 0 ; i < n;i){bites[i] Count(i);}return bites;}public int Count(int x){int count 0;while(x > 0){x & (x - 1);count;}return count;} }

【SVN】Windows版合并提交bat文件+自定义菜单快捷键

【工具向】利用bat批处理打开TortoiseGit简化版本管理流程_tortoisegit bat-CSDN博客 start cmd /k "cd C:\YourBranchProj && svn cleanup && svn update && svn merge C:\YourTrunkProj -r 历史版本号:HEAD && svn commit -m "me…

项目接口性能优化方案

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅&#xff0c;闭关学习中 &#x1f60…

论文阅读《Restormer: Efficient Transformer for High-Resolution Image Restoration》

论文地址:https://openaccess.thecvf.com/content/CVPR2022/html/Zamir_Restormer_Efficient_Transformer_for_High-Resolution_Image_Restoration_CVPR_2022_paper.html 源码地址:https://github.com/swz30/Restormer 概述 图像恢复任务旨在从受到各种扰动(噪声、模糊、雨滴…

低延时视频技术的应用场景和挑战

编者按 无线网络对人们的生活产生了巨大的影响&#xff0c;而5G技术的引入将彻底改变我们与世界互联互通的方式。在5G时代&#xff0c;实现万物互联离不开低延时技术的应用。 LiveVideoStackCon 2023 深圳站邀请到秒点科技的CEO扶凯&#xff0c;为大家分享低延时技术在物联网、…

家政行业的小程序都需要具备哪些功能?

家政服务小程序&#xff0c;覆盖多城&#xff0c;在线派单 适合行业&#xff1a;家电维修、家政保洁、养生护理、美容美发、预约服务上门等 系统功能&#xff1a;服务管理、商品管理、拼团/秒杀、订单管理、会员管理、派单管理、师傅管理、商家/服务点、财务管理、城市代理、次…

Python算法例30 统计前面比自己小的数

1. 问题描述 给定一个整数数组&#xff08;数组大小为n&#xff0c;元素的取值范围为0~10000&#xff09;&#xff0c;对于数组中的每个元素&#xff0c;计算其前面元素中比它小的元素数量。 2. 问题示例 对于数组[1&#xff0c;2&#xff0c;7&#xff0c;8&#xff0c;5]&…

分享44个PyQt5源码总有一个是你想要的

分享44个PyQt5源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1_5H_0Ydg0XUa1fz5Jok51Q?pwd6666 提取码&#xff1a;6666 项目名称 B站直播弹幕姬&#xff…

快速、安全、高效地传输海量小文件

随着互联网技术的不断进步&#xff0c;我们正迈入信息爆炸的时代。在这个时代&#xff0c;企业每天都需要在互联网上传输海量的小文件。与传输常见的大文件相比&#xff0c;海量小文件的传输变得更加困难。接下来&#xff0c;我们将分析海量小文件传输面临的挑战&#xff0c;并…

云原生机器学习平台cube-studio开源项目及代码简要介绍

1. cube-studio介绍 云原生机器学习平台cube-studio介绍&#xff1a;https://juejin.cn/column/7084516480871563272 cube-studio是开源的云原生机器学习平台&#xff0c;目前包含特征平台&#xff0c;支持在/离线特征&#xff1b;数据源管理&#xff0c;支持结构数据和媒体标…

Modbus RTU转Modbus TCP模块,RS232/485转以太网模块,YL102 多功能串口服务器模块

特点&#xff1a; ● Modbus RTU协议自动转换成Mobus TCP协议 ● 100M高速网卡&#xff0c;10/100M 自适应以太网接口 ● 支持 AUTO MDI/MDIX&#xff0c;可使用交叉网线或平行网线连接 ● RS232波特率从300到256000可设置 ● 工作方式可选择TCP Server, TCP Client, U…

中间件系列 - Redis入门到实战(原理篇)

前言 学习视频&#xff1a; 黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 学习目标 Redis数据结构Redis网…

企业员工2024年工作计划和目标怎么写?怎么提醒自己按时执行?

2024年的钟声即将敲响&#xff0c;对于众多企业员工而言&#xff0c;新的一年意味着新的挑战和机遇。而在这之前&#xff0c;制定一份明确的2024年工作计划与目标就显得尤为重要。但不少员工在面对这个任务时&#xff0c;往往感到无从下手&#xff0c;那么如何撰写一份实用且有…

pyCharm 打印控制台中文乱码解决办法

解决方法 在 "File" -> "Settings" 中的控制台设置&#xff1a; 在 "File" -> "Settings" 中&#xff0c;你可以找到 "Editor" -> "General" -> "Console"。在这里&#xff0c;你可能会找到…

frp(实现内网穿透)服务搭建与ssh连接测试

frp 内网穿透 内网穿透的英文叫做NAT traversal&#xff0c;又被称为端口映射或内网映射&#xff0c;内网穿透是网络连接术语&#xff0c;如下图如果我&#xff08;局域网A中的一台服务器&#xff09;想访问另一个局域网c中的一台服务器&#xff0c;可以通过拥有公网ip的B服务…