当前位置:网站首页>C language calculation date interval days
C language calculation date interval days
2022-07-26 10:34:00 【Neo Wordsworth】
How many days are the two dates related ,
I saw one on the Internet “C Analysis of the classical algorithm for calculating the number of days between dates in language ” article , The code is as follows :
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);
}I use java Randomly generate some data to verify this c Code , Some data are incorrect , such as
4645-8-25
5074-4-28
java The calculation is as follows :
(int) ((c2.getTime().getTime() - c1.getTime().getTime()) / (1000 * 3600 * 24));Then I wrote a code myself ,
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;
}边栏推荐
- [Halcon vision] software programming ideas
- Nacos custom service change subscription
- 【机器学习小记】【搭建循环神经网络及其应用】deeplearning.ai course5 1st week programming(keras)
- 并行、并发及对于高并发优化的几个方向
- Some web APIs you don't know
- Okaleido生态核心权益OKA,尽在聚变Mining模式
- hx711 数据波动大的问题
- 微信公众号发布提醒(微信公众号模板消息接口)
- [Halcon vision] image filtering
- [Halcon vision] array
猜你喜欢
随机推荐
数据库函数
Interview questions and answers for the second company (2)
Function template parameters (where are the function parameters)
algorithm
[Halcon vision] threshold segmentation
一些你不知道的 web API
Redis特殊数据类型使用场景
.NET操作Redis String字符串
Application of.Net open source framework in industrial production
事务的传播性propagation
Tradingview 使用教程
Controller返回JSON数据
Dynamically determine file types through links
【Halcon视觉】编程逻辑
Comparison of packet capturing tools fiddler and Wireshark
json_object_put: Assertion `jso->_ref_count > 0‘ failed.Aborted (core dumped)
将json文件中数组转换为struct
Redis docker instance and data structure
并行、并发及对于高并发优化的几个方向
Google与Pixar开发Draco支持USD格式 加速3D对象传输&lt;转发&gt;

![[Halcon vision] array](/img/29/905d93795a24538fded18d2d377e52.png)

![[Halcon vision] morphological expansion](/img/ce/abaca036fce5b67dfe6ac361aecfea.png)


![[leetcode每日一题2021/2/13]448. 找到所有数组中消失的数字](/img/9b/624416fa6a408bf64ca5438273176b.png)


