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


}

相关文章
|
3天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
300 100
|
4天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;
|
5天前
|
Android开发 开发者 Windows
这是我设计的一种不关机,然后改造操作系统的软件设计思路2.0版本
本文介绍了在不重启系统的情况下实现操作系统改造的两种方案。第一种方案通过SLFM Recovery模式,在独立于操作系统的最高权限环境下完成系统更新与改造,并支持断电恢复与失败回滚。第二种方案采用多分区机制,通过SLFM套件在独立分区中完成系统改造,适用于可中断与不可中断服务场景,确保系统更新过程的安全与稳定。
228 132
|
4天前
|
缓存 JavaScript 前端开发
JavaScript 的三种引入方法详解
在网页开发中,JavaScript 可通过内联、内部脚本和外部脚本三种方式引入 HTML 文件,各具适用场景。本文详解其用法并附完整示例代码,帮助开发者根据项目需求选择合适的方式,提升代码维护性与开发效率。
196 110

热门文章

最新文章