技术笔记: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;


}

相关文章
|
8月前
|
存储 C++
【C++初阶】第三站:类和对象(中) -- 日期计算器
【C++初阶】第三站:类和对象(中) -- 日期计算器
|
7月前
|
数据安全/隐私保护
杨老师课堂之Excel VBA 程序开发第七讲之自动筛选
杨老师课堂之Excel VBA 程序开发第七讲之自动筛选
47 1
|
7月前
|
数据安全/隐私保护
杨老师课堂之Excel VBA 程序开发第三讲创建日报表
杨老师课堂之Excel VBA 程序开发第三讲创建日报表
32 0
|
4月前
|
存储 Python 容器
Python编程基础第二天学习笔记
Python编程的第二天学习是建立在基础概念上的深化和扩展,强调了基本语法、数据类型、控制结构和函数的重要性。通过实践这些概念,可以增强对Python编程语言的理解,并为后续的高级学习打下坚实的基础。继续实践并逐渐探索更复杂的编程任务将有助于巩固和扩展这些基础知识。
44 7
|
6月前
|
编译器 C++
【C++】如何用C++写一个日期计算器
【C++】如何用C++写一个日期计算器
|
7月前
|
存储 Java 数据安全/隐私保护
小白聊《JAVA编程思想》 对象导论一
小白聊《JAVA编程思想》 对象导论一
37 0
|
7月前
|
存储 Java 容器
小白聊《JAVA编程思想》-对象导论二
小白聊《JAVA编程思想》-对象导论二
34 0
|
8月前
|
存储 算法 搜索推荐
数据结构期末复习(fengkao课堂)
数据结构期末复习(fengkao课堂)
276 0
|
8月前
|
前端开发 C语言
前端知识笔记(四十)———用C语言实现计算器功能
前端知识笔记(四十)———用C语言实现计算器功能
84 0
|
IDE 编译器 开发工具
本周知识点杂记1
本周知识点杂记1
93 0