技术笔记:segi日期计算笔记

简介: 技术笔记:segi日期计算笔记

计算月末最后一天


/


输入年月格式YM(如:201911),输入该月最后一天


/


int monthEndDay(int YM)


{


int endDay;


int Y = YM / 100;


int M = YM % 100;


if (2 == M)


{


if (0 == Y % 400 || (0 == Y % 4 && 0 != Y % 100))


{


endDay = 29;


}


else


{


endDay = 28;


}


}


else if (1 == M || 3 == M || 5 == M || 7 == M || 8 == M || 10 == M || 12 == M)


{


endDay = 31;


}


else


{


endDay = 30;


}


return endDay;


}


void test() {


int ymd = 20190227;


int y = ymd / 10000;


int m = ymd / 100 % 100;


int d = ymd % 100;


cout [ "ymd : " [ ymd [ endl;


cout [ "y : " [ y [ endl;


cout [ "m : " [ m [ endl;


cout [ "d : " [ d [ endl;


int endDay = monthEndDay(y100 + m);


cout [ "endDay: " [ endDay [ endl;


}


增减天数


/


输入年月日格式YMD(如:20191114),输入增减天数nD,返回年月日格式


/


int AddDays(int YMD, int nD)


{


int endDay = 0;


int Y = YMD / 10000;


int D = YMD % 100;


int M = YMD / 100 % 100 ;


D += nD;


endDay = monthEndDay(Y100 + M);


if ( nD > 0 )


{


while ( D > endDay )


{


D -= endDay;


M += 1;


if ( M > 12 )


{


Y += M / 12;


M = M % 12;


}


endDay = monthEndDay(Y100 + M);


}


}


else


{


while (D <= 0)


{


M -= 1;


if (0 == M)


{


Y -= 1;


M = 12;


}


endDay = monthEndDay(Y 100 + M);


D += endDay;


}


}


return (Y100 + M) 100 + D;


}


void test_addDay() {


int YMD = 20191114;


int addedYMD1 = AddDays(YMD, -5);


int addedYMD2 = AddDays(YMD, -16);


int addedYMD3 = AddDays(YMD, 10);


int addedYMD4 = AddDays(YMD, 18);


cout [ "addedYMD1: " [ addedYMD1 [ endl; // 20191109


cout [ "addedYMD2: " [ addedYMD2 [ endl; // 20191029


cout [ "addedYMD3: " [ addedYMD3 [ endl; // 20191124


cout [ "addedYMD4: " [ addedYMD4 [ endl; // 20191202


}


增减月份


/


输入年月格式YM(如:201911),和增加和减少月数nM, 返回年月格式


/


int addMonths(int YM, int nM)


{


if ( 0 == nM ) return YM;


int Ms = YM / 100 12 + YM % 100 + nM;


int Y = Ms / 12;


int M = Ms //代码效果参考:http://www.lyjsj.net.cn/wz/art_23204.html

% 12;

if ( 0 == M )


{


M = 12;


Y -= 1;


}


return Y 100 + M;


}


void test_addMonths() {


int YM = 201911;


int addedYM = addMonths(YM, 2);


cout [ "addedYM: " [ addedYM [ endl; // 201001


}


获取下一个月


/


输入年月格式YM(如:201911), 返回年月格式,根据当前月推算下月


/


int nextMonth(int YM)


{


int Y = YM / 100;


int M = YM % 100;


if (12 == M)


{


M = 1;


Y = Y + 1;


}


else


{


M = M + 1;


}


return (Y //代码效果参考:http://www.lyjsj.net.cn/wx/art_23194.html

100 + M);

}


void test_nextMonth() {


int YM = 201912;


int next_month = nextMonth(YM);


cout [ "next_month: " [ next_month [ endl; // 202001


}


计算weekDay


// 返回 0-6 分别代表周一到周日


int calcWeekDay(int ymd)


{


int y = ymd / 10000;


int m = ymd / 100 % 100;


int d = ymd % 100;


// 此处表示把1,2月计算到上一年的13,14月


if (m == 1 || m == 2) {


m += 12;


y--;


}


// 基姆拉尔森计算公式


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


return week;


}

相关文章
|
4月前
|
存储 Python 容器
Python编程基础第二天学习笔记
Python编程的第二天学习是建立在基础概念上的深化和扩展,强调了基本语法、数据类型、控制结构和函数的重要性。通过实践这些概念,可以增强对Python编程语言的理解,并为后续的高级学习打下坚实的基础。继续实践并逐渐探索更复杂的编程任务将有助于巩固和扩展这些基础知识。
44 7
|
6月前
|
编译器 C++
【C++】如何用C++写一个日期计算器
【C++】如何用C++写一个日期计算器
|
算法 安全 Unix
翁恺C语言程序设计网课笔记合集
学习自翁恺C语言程序设计网课。
1494 1
翁恺C语言程序设计网课笔记合集
|
8月前
|
前端开发 C语言
前端知识笔记(四十)———用C语言实现计算器功能
前端知识笔记(四十)———用C语言实现计算器功能
87 0
|
机器学习/深度学习 Web App开发 人工智能
特征工程系列学习(一)简单数字的奇淫技巧
特征工程系列学习(一)简单数字的奇淫技巧
特征工程系列学习(一)简单数字的奇淫技巧
|
机器学习/深度学习 数据可视化 算法
特征工程系列学习(一)简单数字的奇淫技巧(下)
特征工程系列学习(一)简单数字的奇淫技巧(下)
特征工程系列学习(一)简单数字的奇淫技巧(下)
|
存储 缓存 移动开发
移动多媒体知识点期末总结
移动多媒体知识点期末总结
169 0
程序人生 - 退税教程(个人所得税)
程序人生 - 退税教程(个人所得税)
429 0
|
移动开发 人工智能 前端开发
【收藏篇】十一月优秀技术博文整合,值得收藏!
公众号『程序IT圈』 ,到今天已经运营快三个月了,首先感谢关注我公众号的朋友们,因为有你们的认可和支持,我才有动力坚持原创更新文章 。在上个月里,我分享了将近二十篇文章 。今天周末刚好将11 月份的优质博文,整合一下分享给大家 。大家有空的话,可以点击阅读给自己充电充电哈 。作为合格的程序猿,持续学习是技术提升的关键,希望大家的编程技术水平越来越高 。
144 0