栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++输出任意日期的整数表示,给定日期的整数表示, 求日期对应的年月日

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++输出任意日期的整数表示,给定日期的整数表示, 求日期对应的年月日

//1、 假设日期 1969.01.01 用 0 表示, 请开发一个函数输出任意日期的整数表示(日期小于
//1969.01.01 的用负数表示)。 反过来, 给定日期的整数表示, 开发一个函数求日期对应的年//月日。

//判断是否是平年,平年365,闰年366
inline bool isPy(int y) {
	if ((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0))return false;
	else return true;
}
void getZhengDays(int& days, int y, int m, int d) {
	for (int i = 1969; i < y; i++) {
		if (isPy(i))days += 365;
		else days += 366;
	}
	for (int i = 1; i < m; i++) {
		switch (i)
		{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12: {days += 31; break; }
		case 4:
		case 6:
		case 9:
		case 11: {days += 30; break; }
		default: {if (isPy(y))days += 28;
			   else days += 29; }
			   break;
		}
	}
	days += d - 1;
}
void getFuDays(int& days, int y, int m, int d) {
	for (int i = y + 1; i < 1969; i++) {
		if (isPy(i))days += 365;
		else days += 366;
	}
	int tempDays = 0;
	for (int i = 1; i < m; i++) {
		switch (i)
		{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12: {tempDays += 31; break; }
		case 4:
		case 6:
		case 9:
		case 11: {tempDays += 30; break; }
		default: {if (isPy(y))tempDays += 28;
			   else tempDays += 29; }
			   break;
		}
	}
	if (isPy(y))days += (365 - tempDays - d);
	else days += (366 - tempDays - d);
	days = -days - 1;
}
void D2Zhengshu() {
	int y, m, d;
	cout << "根据输入的日期得到其整数表示,日期 1969.01.01 用 0 表示" << endl;
	cout << "输入的日期格式为y m d" << endl;
	cout << "请输入日期:";
	while (cin >> y >> m >> d) {
		if (m < 1 || m>12 || d < 1 || d>31)cout << "输入日期有误,请重新输入!" << endl;
		else break;
	}
	int days = 0;
	if (y >= 1969) {//得到正整数
		getZhengDays(days, y, m, d);
	}
	else {//得到负整数
		getFuDays(days, y, m, d);
	}
	cout << days << endl;
}
void Zhengshu2D() {
	int zhengShu;
	cout << "根据输入的得到对应的日期,日期用 y/m/d 表示" << endl;
	cout << "请输入整数:";
	cin >> zhengShu;
	int y = 1969, m = 1, d = 1;
	unordered_mapmp = {
		{1,31},
		{2,29},
		{3,31},
		{5,31},
		{7,31},
		{8,31},
		{10,31},
		{12,31},
		{4,30},
		{6,30},
		{9,30},
		{11,30}
	};
	if (zhengShu > 0) {
		while (zhengShu >= 365) {
			y += 1;
			if (isPy(y))zhengShu -= 365;
			else zhengShu -= 366;
		}
		if (zhengShu < 0) {
			zhengShu += 366;
			y--;
		}
		while (zhengShu) {
			int md = mp[m];
			if (isPy(y) && m == 2)md = md - 1;
			zhengShu -= md;
			if (zhengShu < 0) {
				zhengShu += md;
				break;
			}
			m++;
			if (m != 2 && zhengShu <= mp[m])break;
		}
		if (!isPy(y))zhengShu++;
		d += zhengShu;
	}
	else if (zhengShu == 0) {
		y = 1969, m = 1, d = 1;
	}
	else {
		zhengShu = -zhengShu;
		while (zhengShu >= 365) {
			y -= 1;
			if (isPy(y))zhengShu -= 365;
			else zhengShu -= 366;
		}
		if (zhengShu <= 0) {
			zhengShu += 366;
			y++;
		}
		y--;
		if (isPy(y))zhengShu = 365 - zhengShu;
		else zhengShu = 366 - zhengShu;
		while (zhengShu) {
			int md = mp[m];
			if (isPy(y) && m == 2)md = md - 1;
			zhengShu -= md;
			if (zhengShu < 0) {
				zhengShu += md;
				break;
			}
			m++;
			if (m != 2 && zhengShu <= mp[m])break;
		}
		//if (!isPy(y))zhengShu--;
		d += zhengShu;
	}
	cout << to_string(y) + "/" + to_string(m) + "/" + to_string(d) << endl;
}

int main() {
	//由日期得到整数
	D2Zhengshu();
	//由整数得到日期
	Zhengshu2D();
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832635.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号