当前位置:网站首页>C语言计算日期间隔天数
C语言计算日期间隔天数
2022-07-26 10:29:00 【Neo Wordsworth】
要计算两个日期相关多少天,
网上看到一个“C语言计算日期间隔天数的经典算法解析”文章,其代码如下:
int day_diff(int year_start, int month_start, int day_start, int year_end, int month_end, int day_end)
{
int y2, m2, d2;
int y1, m1, d1;
m1 = (month_start + 9) % 12;
y1 = year_start - m1/10;
d1 = 365*y1 + y1/4 - y1/100 + y1/400 + (m1*306 + 5)/10 + (day_start - 1);
m2 = (month_end + 9) % 12;
y2 = year_end - m2/10;
d2 = 365*y2 + y2/4 - y2/100 + y2/400 + (m2*306 + 5)/10 + (day_end - 1);
return (d2 - d1);
}
我用java随机生成一些数据去验证这个c代码,有些数据不对,比如
4645-8-25
5074-4-28
java计算如下:
(int) ((c2.getTime().getTime() - c1.getTime().getTime()) / (1000 * 3600 * 24));
然后自己写了个代码,
u8 IsLeapYear(u16 year){
if ((year & 0x03) == 0) {
if ((year >> 2) % 25 == 0) {
if ((year & 0x0f) == 0)
return 1;
} else {
return 1;
}
}
return 0;
}
const u8 offset[]= {0,0,1,5,6,8,9,11,12,13,15,16,18};
u32 CalDayDiff(MyDate* s,MyDate* e){
u32 yDiff,i;
u32 sum=0,sum2;
MyDate d;
yDiff=e->year-s->year;
if(yDiff>1){
for(i=s->year+1;i<e->year;i++){
sum+=IsLeapYear(i)?366:365;
}
yDiff=1;
}
switch(yDiff){
case 0:
sum=((e->month-1)<<5)-offset[e->month]+e->day;
if(e->month>2 && IsLeapYear(e->year))
sum+=1;
sum2=((s->month-1)<<5)-offset[s->month]+s->day;
if(s->month>2 && IsLeapYear(s->year))
sum2+=1;
sum-=sum2;
break;
case 1:
d.year=s->year;
d.month=12;
d.day=31;
sum+=CalDayDiff(s,&d);
d.year=e->year;
d.month=1;
d.day=1;
sum+=CalDayDiff(&d,e)+1;
break;
}
return sum;
}
边栏推荐
- 【C#语言】具名类型和匿名类型
- Function templates and non template functions with the same name cannot be overloaded (definition of overloads)
- [Halcon vision] image filtering
- SQL Server 2008 server engine failed to start?
- The difference between equals and = =
- 【socket】三次握手是在listen中完成,accept只从完成连接的队列中拿出一个连接
- 结构体操作报错:Segmentation fault (core dumped)
- Wechat official account release reminder (wechat official account template message interface)
- 数据库的复习--3.SQL语言
- 函数模板与同名的非模板函数不可以重载(重载的定义)
猜你喜欢
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE错误解决方式
Data communication foundation telnet remote management equipment
【Halcon视觉】算子的结构
Review of database -- 3. SQL language
[Halcon vision] image filtering
[Halcon vision] software programming ideas
Learning about opencv (2)
3.1 leetcode daily question 6
Our Web3 entrepreneurship project is yellow
What will the new Fuzhou Xiamen railway bring to Fujian coastal areas?
随机推荐
Dynamically determine file types through links
SAP ABAP Netweaver 容器化的一些前沿性研究工作分享
Modelsim installation tutorial (application not installed)
Review of database -- 3. SQL language
Our Web3 entrepreneurship project is yellow
How to use Gmail to pick up / send mail on Foxmail
【Halcon视觉】形态学腐蚀
简单化构造函数的继承方法(一)- 组合继承
SPARK中 DS V2 push down(下推)的一些说明
数据分析入门 | kaggle泰坦尼克任务
上传图片获取宽高
关于模板函数声明与定义的问题[通俗易懂]
头歌 Phoenix 入门(第1关:Phoenix 安装、第2关:Phoenix 基础语法)
PTA class a 1001
[Halcon vision] threshold segmentation
【杂谈】Error loading psycopg2 module :No module named psycopg2
面试第二家公司的面试题及答案(二)
数据库的复习--3.SQL语言
【Halcon视觉】形态学膨胀
Employee information management system based on Web