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


}

相关文章
|
9月前
|
运维 安全 网络安全
第1期笔记
该文探讨了数据可信流通的重要性和体系,强调从运维信任转向技术信任。关键点包括:建立身份确认、利益依赖、能力预期和行为后果的信任基石;确保数据在持有方的安全区域内循环的责任机制;以及通过可信数字应用身份、跨域使用权管控、能力预期平衡和全链路审计来实现技术信任。其中,全链路审计和密态数联网(如隐私计算)是构建闭环数据可信流通体系的关键支撑技术。
|
9月前
|
存储 安全 数据安全/隐私保护
第2期笔记
该文探讨数据要素的流转,包括采集、存储、加工等环节,以及数据外循环中面临的安全风险和权属问题。为建立信任,提出从主体信任转向技术信任。在数据流通中,期望实现原始数据不可见、使用可控可计量及数据可算不可识的隐私计算原则。为此,倡导通过开源降低门槛,以促进数据的安全流通。
|
9月前
|
编译器 容器
C++11 (C++2.0)笔记 一
C++11 (C++2.0)笔记 一
64 0
|
9月前
C++2.0(C++11) 笔记 二
C++2.0(C++11) 笔记 二
57 0
|
JavaScript 前端开发 内存技术
WebAPIs-第04天笔记(一)
WebAPIs-第04天笔记
182 0
WebAPIs-第04天笔记(一)
《攻守道》笔记(2)
🍀作者简介:不在校学生,为挣钱努力拼搏的一名小学生。
111 0
《攻守道》笔记(2)
|
编译器 程序员 C++
C++笔记 上
C++笔记 上
104 0
|
黑灰产治理
《攻守道》笔记(3)
🍀作者简介:不在校学生,为挣钱努力拼搏的一名小学生。
91 0
《攻守道》笔记(3)
|
程序员 编译器 C语言
C++系列笔记(七)
C++系列笔记(七)
|
编译器 数据库 C语言
C++系列笔记(四)
C++系列笔记(四)