两个 年月日 之间的天数计算
来源:互联网 发布:edf调度算法 编辑:程序博客网 时间:2024/05/08 21:18
/** Date : 2015.08.13* For : 1.计算从固定时间点 2010.1.1 以来的天数 2.计算两个普通日期之间相隔的天数* Tool : Microsoft Visual Studio 2013*/#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <ctime>void currenttime(time_t t, int &nowyear, int &nowmonth, int &nowday, int &nowyearday){ tm *nowtime = localtime(&t); nowyear = nowtime->tm_year + 1900; nowmonth = nowtime->tm_mon + 1; nowday = nowtime->tm_mday; nowyearday = nowtime->tm_yday;}bool isleapyear(int year) //判断是否闰年{ return year % 4 == 0 && year % 100 != 0 || year % 400 == 0; }int daysofyear(int year) //一年的天数{ if (!isleapyear(year)) return 365; else return 366;}int dayinyear(int year, int month, int day) //根据年月日,判断改天位于该年的第多少天{ int daysinyear = 0; switch (month - 1) { case 11:daysinyear += 30; case 10:daysinyear += 31; case 9: daysinyear += 30; case 8: daysinyear += 31; case 7: daysinyear += 31; case 6: daysinyear += 30; case 5: daysinyear += 31; case 4: daysinyear += 30; case 3: daysinyear += 31; case 2: daysinyear += 28; case 1: daysinyear += 31; break; default: break; } if (isleapyear(year) && month > 2) daysinyear++; daysinyear += day; return daysinyear;}int totalfixeddays() //固定时间点的天数计算{ int beginyear = 2010, beginmonth = 1, beginday = 1; int nowyear, nowmonth, nowday, nowyearday; int totaldays = 0; currenttime(time(NULL), nowyear, nowmonth, nowday, nowyearday); printf(" *************************************************\n"); printf(" * *\n"); printf(" * 固定时间间隔 *\n"); printf(" * Begin:2010. 1. 1 *\n"); printf(" * Today:%d.%2d.%2d *\n", nowyear, nowmonth, nowday); printf(" * *\n"); printf(" *************************************************\n"); printf(" * *\n"); for (int year = beginyear; year < nowyear; year++) totaldays += daysofyear(year); int oldyeardays = dayinyear(beginyear, beginmonth, beginday); totaldays = totaldays + nowyearday - oldyeardays + 1; return totaldays;}int totalcommondays() //两个普通时间点的天数计算{ int oldyear, oldmonth, oldday, newyear, newmonth, newday; int totaldays = -1; printf(" * 请输入两个时间点(年 月 日) 空格间隔 *\n"); scanf("%d%d%d%d%d%d", &oldyear, &oldmonth, &oldday, &newyear, &newmonth, &newday); if (oldyear <= newyear) { totaldays += 1; for (int year = oldyear; year < newyear; year ++) { totaldays += daysofyear(year); } totaldays = totaldays + dayinyear(newyear, newmonth, newday) - dayinyear(oldyear, oldmonth, oldday); } printf(" *************************************************\n"); printf(" * *\n"); printf(" * 起始时间 *\n"); printf(" * Begin:%d.%2d.%2d *\n", oldyear, oldmonth, oldday); printf(" * Until:%d.%2d.%2d *\n", newyear, newmonth, newday); printf(" * *\n"); printf(" *************************************************\n"); printf(" * *\n"); return totaldays;}void print_fixeddays() //输出固定时间间隔{ printf(" * Together :%5d 天 *\n", totalfixeddays()); printf(" * *\n"); printf(" *************************************************\n");}void print_commondays() //输出普通时间间隔{ int days = totalcommondays(); if (days >= 0) printf(" * Together :%5d 天 *\n", days); else printf(" * Error : Begin days is later than End days *\n"); printf(" * *\n"); printf(" *************************************************\n");}void print(int choose) //输出函数{ switch (choose) { case 1: print_fixeddays(); break; case 2: print_commondays(); break; default: printf(" Wrong input number !\n\n"); break; }}int main(){ printf(" **输入指令:1(固定天数计算) 2(普通天数计算)**\n"); int choose; scanf("%d", &choose); print(choose); system("pause"); return 0;}
效果图
0 0
- 两个 年月日 之间的天数计算
- 计算天数------java两个日期之间的天数、分钟计算
- Sql计算两个日期之间的天数
- 计算两个日期之间的工作天数
- JS计算两个日期之间的天数
- JAVA计算两个日期之间的天数
- excel计算两个日期之间的天数
- JS计算两个日期之间的天数
- 计算两个日期之间的天数
- 计算两个日期之间的天数
- 计算两个日期之间的天数。
- javascript计算两个日期之间的天数
- JS计算两个日期之间的天数
- 计算两个日期之间相差的天数
- 计算两个日期之间的间隔天数
- 计算两个日期之间的工作日天数
- 计算两个日期之间的天数
- JS计算两个日期之间的天数
- CV、AR开源代码
- 如何设置IOS Simulator 语言(localization国际化)
- C# 逻辑语句
- ios移动开发block回调和代理传参
- POJ 1035-Spell checker(字符串)
- 两个 年月日 之间的天数计算
- 跨物理节点的2层隔离网络--GRE通道
- 几种不同Js引擎
- metasploit - smb
- HDU Train Problem I (STL_栈)
- 归并排序1.0
- redis安装过程中一些注意事项
- 图片整理
- 暑假集训结束,在此写上一笔小结