C语言 - 日期计算器

用c语言编写一个日期计算器 /用c语言代码编写一个日期计算器思路: 1、首先我要确定二个年份之间天数(当成满年来看)。j1值 2、然后我们再来确定月份: (第一种是前年份的月份小于后年份的月份)那我们就先不看二个年份的本月份(计算二个年份除本月外还剩月份的天数),然后我们再加上前月份剩的天数和后月份过的天数。(相加)(第一种j2值) (第二种是前年份的月份大于后年份的月份)我们还是求出二个月份之间的天数,然后我们还是再加上前月份剩的天数和后月份过的天数。!但我们“注意”这些天数是多余出来的天数,所以等下我们要处理这些多余天数(减去)。 阅读详情
#ifndef __INC_PUBLHEAD_H__
    #define __INC_PUBLHEAD_H__
//-----------------------------------------------------------------------------
#include <stdio.h>
#include "PublType.h"
//-----------------------------------------------------------------------------
#endif


#ifndef __INC_PUBLTYPE_H__
    #define __INC_PUBLTYPE_H__
//-----------------------------------------------------------------------------
typedef char                String;         // 字符串型
typedef unsigned int        Boolean;        // 布尔型

typedef unsigned char       UFix08;         // 无符号  8 位
typedef unsigned short int  UFix16;         // 无符号 16 位
typedef unsigned long int   UFix32;         // 无符号 32 位

typedef signed char         SFix08;         // 带符号  8 位
typedef signed short int    SFix16;         // 带符号 16 位
typedef signed long int     SFix32;         // 带符号 32 位

typedef unsigned int        UAuto08;        // 无符号 至少  8 位
typedef unsigned int        UAuto16;        // 无符号 至少 16 位
typedef unsigned long       UAuto32;        // 无符号 至少 32 位

typedef signed char         SAuto08;        // 带符号 至少  8 位
typedef signed int          SAuto16;        // 带符号 至少 16 位
typedef signed long         SAuto32;        // 带符号 至少 32 位
//-----------------------------------------------------------------------------
#endif


#include "PublHead.h"

typedef struct
{
    UAuto32         year;           // 年(0000~65535)
    UAuto08         month;          // 月(1~12)
    UAuto08         day;            // 日(1~31)
} STR_DTTM;

// 判断是否是闰年(公元历法)
// 闰年判断方法: 能被4整除且不能被100整除   或   能被400整除
static Boolean IsLeapYear(UAuto32 y)
{
    return ((((y % 4) == 0) && ((y % 100) != 0)) || ((y % 400) == 0)) ? 1 : 0;
}

static const UAuto16 day_of_month[2][13] =
{
	{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365},
	{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366}
};

// 计算与公园1年1月1日在偏移量
static UAuto32 Date_Sub_010101(STR_DTTM const *dt)
{
	UAuto32 year;

	year = dt->year - 1;
	return year * 365 + ((year / 4) - (year / 100) + (year / 400)) + day_of_month[IsLeapYear(dt->year)][dt->month - 1] + (dt->day - 1);
}

// 函数功能: 计算两个日期的差值 dt1 - dt2
// 输入    : dt1: 日期1 ,    dt2: 日期2
// 输出    : dt1 - dt2
static SAuto32 Date_Sub_Date(STR_DTTM const *dt1, STR_DTTM const *dt2)
{
#if 1
	return Date_Sub_010101(dt1) - Date_Sub_010101(dt2);
#else
	UAuto32 i = 0;
	SAuto32 day = 0;
	SAuto16 sign = 0;
	STR_DTTM big_year;
	STR_DTTM small_year;

	if (!IsLegal(dt1)|| !IsLegal(dt2)) {
		return 0;
	}

	sign = dt1->year > dt2->year ? -1:1;
	big_year = dt1->year > dt2->year ? *dt1:*dt2;
	small_year = dt1->year < dt2->year ? *dt1:*dt2;

	for (i = small_year.year; i < big_year.year; i++) {
		if (IsLeapYear(i)) {
			day += 366;
		} else {
			day += 365;
		}
	}

	day = sign*(Cal_Day_Of_Year(&big_year) - Cal_Day_Of_Year(&small_year) + day);

	return day;
#endif

}


#define FOUR_YEARS 1461
#define FOUR_HUNGRED_YEARS	146097
#define ONE_HUNGRED_YEARS 36524
#define THREE_HUNGRED_YEARS 109572
#define ONE_YEARS 365
#define THREE_YEARS 1095


static void Cal_Date_By_Offset(STR_DTTM *dest, UAuto32 days)
{
	UAuto16 i;
	UAuto16 const *tbl;

	dest->year = (days / FOUR_HUNGRED_YEARS) * 400 + 1; // 求经过多少个400年
	days %= FOUR_HUNGRED_YEARS;

	if (days > THREE_HUNGRED_YEARS) {  // 判断剩余年份是在0-300年间 还是 300-400年间
		dest->year += 300;
		days -= THREE_HUNGRED_YEARS;
	} else {
		dest->year += (days / ONE_HUNGRED_YEARS) * 100;
		days %= ONE_HUNGRED_YEARS;
	}

	dest->year += (days / FOUR_YEARS) * 4;
	days %= FOUR_YEARS;

	if (days > THREE_YEARS) { // 判断剩余年份是在0-3年间 还是 3-4年间
		dest->year += 3;
		days -= THREE_YEARS;
	} else {
		dest->year += days / ONE_YEARS;
		days %= ONE_YEARS;
	}

	tbl = day_of_month[IsLeapYear(dest->year)];

	for (i = days/31; i < 13; i++) {
		if ((days >= tbl[i]) && (days < tbl[i + 1])) {
			dest->month = i + 1;
			break;
		}
	}

	dest->day = days - tbl[dest->month - 1] + 1;

}


// 函数功能: 已知源日期src,目标日期与源日期相差的天数days,求目标日期dest = src + hex
// 输入:    src  : 源日期
//          days : 目标日期与源日期相差的天数
// 输出:    dest : 目标日期
static void TranDateHexToDate(STR_DTTM *dest, STR_DTTM const *src, SAuto32 days)
{
#if 1
	Cal_Date_By_Offset(dest, Date_Sub_010101(src) + days);
#else
	UAuto32 i = 0;
	UAuto32 j = 0;
	SAuto16 sign = 0;
	SAuto32 year = 0;
	SAuto32 differ_days = 0;
	SAuto16 one_year_of_day = 0;
	UAuto32 day_of_moth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

	if (!IsLegal(src)) {
		return;
	}

	if (!days) {
		*dest = *src;
		return;
	}

	sign = days > 0 ? 1:-1;
	differ_days = days + Cal_Day_Of_Year(src);
	if (days > 0) {
		one_year_of_day = IsLeapYear(src->year) > 0 ? 366:365;
	} else {
		one_year_of_day = IsLeapYear(src->year - 1) > 0 ? 366:365;
		j = -1;
	}


	 while(differ_days < -1*one_year_of_day || differ_days > one_year_of_day) {


		differ_days -= sign*one_year_of_day;
		year += sign;

		if(IsLeapYear(src->year + year + j)) {
			one_year_of_day = 366;
		} else {
			one_year_of_day = 365;
		}
	}

	if (days < 0) {
		if(IsLeapYear(src->year + year + sign)) {
			differ_days += 366;
		} else {
			differ_days += 365;
		}
		year += sign;
	}

	dest->year = src->year + year;

	if (IsLeapYear(dest->year)) {
		day_of_moth[1]++;
	}


	for(i = 0; differ_days > day_of_moth[i]; i++) {

		differ_days -= day_of_moth[i];
	}

	dest->month = i+1;
	dest->day = differ_days;

#endif
}

void main(void)
{
	STR_UFix64 mlong1 = {0};
	STR_DTTM date1 = {0};
    STR_DTTM date2 = {0};

	date1.year = 2003;
	date1.month = 1;
	date1.day = 1;
    date2.year = 4;
    date2.month = 12;
    date2.day = 31;
    TranDateHexToDate(&date1, &date2, 0);
	printf("010101 days = %ld\n", Date_Sub_010101(&date2));
    printf("year = %ld month = %ld day = %ld\n", date1.year, date1.month, date1.day);



	Cal_U32_Mul_U32(0xfdf52234L, 0x00fed741, &mlong1);
	printf("retv->high = %lx,  ",mlong1.high);
    printf("retv->low = %lx\r\n",mlong1.low);

}

C语言日期计算器vs2022 只有一个源文件main函数 代码有点多,有好几处可以简短,但是你知道的我比较懒! 这个代码最主要的是 int w; w = (day + 2 * month2 + 3 * (month2 + 1) / 5 + year2 + year2 / 4 - year2 / 100 + year2 / 400) % 7;/*基姆拉尔森计算公式*/ 这个公式 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>... 阅读详情

相关推荐

C语言日期计算器的十二种死法:边界条件压力测试指南

本文深入探讨C语言日期计算器开发中的十二种常见边界条件问题,包括极端年份处理、闰年判断、非法日期组合等关键挑战。通过代码示例和测试矩阵,详细解析如何避免金融系统崩溃、航班调度错误等严重后果,特别强调ISO 8601标准范围校验和2038年时间戳溢出风险。

weixin_29006187的博客 443

C语言实现分钟转换年和天

C语言实现提示用户输入分钟数(例如10000000),然后显示这些分钟代表多少年和多少天。为了简化问题,假设一年有365天,不足1天按1天算。 //方法一: #include "stdio.h" int main(void) { long int m,y,d,m1; scanf("%ld",&m); y=m/60/24/365; d=(m-y*365*24*60)/60/24; m1=m-y*365*24*60-d*60*24; if(m1>0) d++; printf(

回忆式~过去.的博客 1万+

C语言简易日期计算器

通过用户输入的日期基准数据计算出用户想要查询的日期是星期几,并可以选择输出这一年的完整日历。望笑纳。

分钟转换日期计算器

错解: 错因:不知道怎么去掉超过1年的天数 正解:

weixin_60892576的博客 1717

C语言同时实现计算器和进制转换功能

兼有计算器和进制转换功能,计算器可计算小数点,括号;进制转换可进行2、8、10、16进制之间的任意互相转换。两项功能汇总于一页.CPP文件,打开可直接运行。

视觉机器人抓取实战:从物体定位到抓取估计的完整流程解析(附Python代码示例)

本文详细解析了视觉引导机器人抓取的完整技术流程,涵盖从物体定位、位姿估计到抓取估计的核心步骤。通过Python代码示例,演示了如何使用Open3D等工具进行点云处理、平面分割、PCA与ICP位姿估计,以及基于几何启发式的抓取生成方法,为机器人视觉抓取开发提供了清晰的实战指南。

peach的博客 914

C# 时间计算(二)

在 C# 中,DateTime 用于处理日期和时间的内置类,其值范围为 00:00:00 (午夜) , 0001年1月1日,安诺·多米尼 (公历) 年12月31日晚上11:59:59 (公历 )。时间值以 100 纳秒为单位进行测量,称为刻度。特定日期是自 A.0001 年 1 月 1 日午夜 12:00 以来的时钟周期数, (日历中的 GregorianCalendar C.E.)。该数字不包括按闰秒添加的刻度。

熊思雨的博客 5136

相控阵雷达仿真入门:TWS与TAS模式实战解析(附代码示例)

本文深入解析相控阵雷达仿真中的TWS(边搜索边跟踪)与TAS(搜索加跟踪)模式,提供实战代码示例和优化策略。通过简化模型设计和对象化建模,帮助开发者快速构建高效仿真系统,适用于军事推演和装备评估。文章涵盖核心逻辑、数据结构设计及性能优化技巧,提升仿真效率与准确性。

weixin_30687051的博客 453

C# 按钮计算器的实现

namespace 计算器 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // bool iskey = false; // 定义一个字符接收 符号 ...

JGD313的博客 1856

从宏观到街道:如何利用七普数据为WorldPop人口栅格做“本地化”校准?

本文探讨了如何利用第七次全国人口普查(七普)数据对WorldPop人口栅格进行本地化校准,以提高街道级别的人口分布精度。通过分析数据偏差、选择适当的技术路线和工具(如Arcgis和栅格计算器),文章详细介绍了从宏观到街道的校准实践,帮助规划公共卫生资源和优化城市基础设施。

janckywong963的专栏 513

TI CC2642R蓝牙5.2模块实战:从零搭建智能门锁原型(附电路图)

本文详细介绍了如何基于TI CC2642R蓝牙5.2模块从零搭建智能门锁原型,涵盖硬件选型、低功耗配置、蓝牙安全交互等关键环节。通过CC2642R的高性能MCU和蓝牙5.2技术,开发者可实现低功耗、高安全性的智能门锁设计,并提供实用的电路图和PCB布局建议。

o5p6q的博客 110

获取某年某月前后几个月的日期

获取某年某月前后几个月的日期需求实现心得 需求 单选按钮 显示当前 前两个月,当前月,后一个月 实现 function getMonth(currentYear,currentMonth,num){ let time={}; let diff= currentMonth-num if( currentMonth- num <= 0 ){ time.value = `${currentYear-1}-${ diff+1

MM__GCM666的博客 437

Python爬虫实战:用Selenium+ChromeDriver批量抓取政府网站政策文件(附完整代码)

本文详细介绍了使用Python的Selenium和ChromeDriver进行政府网站政策文件批量抓取的实战技巧。从环境配置、动态页面元素定位到分页机制破解和反爬虫策略,提供了完整的解决方案和代码示例,帮助开发者高效获取结构化政策数据。

weixin_42531710的博客 266

日期计算器_C语言

#include <stdio.h> #include <stdlib.h> int main() { int y, m ,d, x; scanf("%d%d%d",&y,&m,&d); scanf("%d",&x); for(int i = 0; i < x; i++){ d += 1; //31天的几个月份 switch(m){ case

qq_36697944的博客 497

Cadence SKILL 语言实战指南:从函数列表到高效自动化脚本

本文是Cadence SKILL语言实战指南,旨在帮助芯片设计工程师从掌握核心函数列表出发,高效构建自动化脚本。文章详细解析了数据处理、数据库访问、流程控制及错误处理四类关键函数,并通过版图层批量修改与参数化单元生成两大实战场景,演示如何将函数组合成解决实际问题的自动化方案,从而显著提升Virtuoso环境下的工作效率。

beta5的博客 705

GB 47955—2026 L2组合驾驶辅助强制国标全解、合规方案与工程代码落地

GB 47955—2026 L2辅助驾驶国标合规工程代码# 运行环境:Python3.8+,适配车载仿真、台架测试、算法验证场景# 依赖安装:pip install numpy dataclasses tqdm struct time json# ===================== 国标强制时序参数(完全对标GB 47955—2026) =====================HAND_OFF_FIRST_WARN = 5.0 # 手部脱离5s触发一级预警。

lin_xiu的博客 304

c语言日期加减天数,日期计算器

一 完成的功能注意:此日历只能用于计算1982年10月15日以及以后的日期1.日期+/-天数=返回日期(处理:1.如果+/-一个负的天数的情况 2.如果加之后,或减之后的日期非法)2.两个日期之间间隔的天数,日期-日期=返回的天数(处理:返回的天数不能为负)3.打印某年某月本月的日历(处理:1982年十月份)二 功能分析 三 项目测试点:功能测试:(1)对输入日期合法性的测试----------...

weixin_34332352的博客 2833

论文必备 - YOLOv11热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv11热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 5505

c语言日期计算器程序代码,用C语言写一个日期计算器

首先,我们应知道日期计算器包括哪些功能1、明天的日期2、n天后的日期3、两个日期之间的天数我们先从第一个功能开始,首先创建一个日期的结构体,包括:年、月、日。struct date{int day;int month;int year;};其次来看一下解决这个问题的思想: 然后我们要写一个判断闰年的函数:int Leap(struct date d){int leap = false;if ((...

weixin_30026331的博客 1536

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

用C语言写一个日期计算器

  首先,我们应知道日期计算器包括哪些功能1、明天的日期2 、n天后的日期3、两个日期之间的天数我们先从第一个功能开始,首先创建一个日期的结构体,包括:年、月、日。struct date { int day; int month; int year; };其次来看一下解决这个问题的思想:然后我们要写一个判断闰年的函数:int Leap(struct date d) { int leap =...

The Laughing Uncle的博客 5903

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C语言日期计算器

记录下码子 1 # define _CRT_SECURE_NO_WARNINGS 2 # include <stdio.h> 3 # include <stdlib.h> 4 5 int days(int month) 6 { 7 int day; 8 switch (month) 9 { 10...

weixin_30740295的博客 267

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

c语言天数倒计时软件,c语言 日期倒计时 日期计算器

这是一个用C写的 日期倒计时的程序#include"stdio.h"int year,month,day,year1,month1,day1,result,n,i,x,y;int table[]={29,31,28,31,30,31,30,31,31,30,31,30,31}; //定义每个月的天数int table1[] = {28,31,29,31,30,31,30,31,31,30...

weixin_39605706的博客 1087

c语言 日期加减天数返回日期 闰年,日期计算器(多图)

日期计算器(多图)08-21栏目:技术TAG:天数统计天数计算器一 完成的功能注意:此日历只能用于计算1982年10月15日以及以后的日期 www.jhua.org1.日期+/-天数=返回日期(处理:1.如果+/-一个负的天数的情况 2.如果加之后,或减之后的日期非法) copyright www.jhua.org2.两个日期之间间隔的天数,日期-日期=返回的天数(处理:返回的天数不能为负)ww...

weixin_31748605的博客 1043

c语言日期计算器程序代码,旧计算器(C语言代码)

#### 原题链接:[题目486 - ACM在线评测系统](http://nyoj.top/problem/486 "nyoj在线评测")#### 原题内容:**题目描述:**szhhck有一个五年前买的旧计算器。他发现旧计算器仅能计算这样的表达式:A-B、A+B、A*B、A/B、A%B。由于太旧并且长时间没有使用,旧计算器有时可能得出错误结论。你的任务是写个程序去检测旧计算器计算的答案正确与否。...

weixin_34333047的博客 226

用c语言编写天数计算器,C/C++实现日期计算器的示例代码

问题介绍:今天突然看到一个问题看起来蛮有趣的,跟大家分享一下. 给定任意日期对该日期进行加减天数,最后得出加减后出现的日期.以及给两个日期你可以得出他们两个之间相隔多少天.(需要考虑闰年,每个月天数不同,我们需要写一个我们直接可以使用的日期加减器)因为时间比较仓促,我也没有写界面,只有其中几个主要的函数的架构思想以及简单的调试就发出来了.代码实现:#include#include#includeu...

weixin_35871890的博客 793

用c语言编写一个万年历

利用c语言编写一个万年历。

steellee1468867497的博客 1819
上一篇: asterisk -安装、配置 (Linux)
下一篇: C语言 32位 和 64位数 之间 位数 的加减乘除运算
四夕、
博客等级 码龄8年 19粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值