日期加天数返回日期 - C语言实现
2013-05-10 21:29
253 查看
问题描述:
已知日期,格式为mm-dd-yyyy(月-日-年,如2003年9月10日为:9-10-2003),给定一个天数(如100天),计算:从该日期算起,经过给定天数之后的日期。
主要思想:
1、当给定的天数days大于或等于365(或366)时,计算目标年份
2、当给定的天数days小于365(或366)时,计算目标年份中的月份
3、当剩余天数不足一月时,计算目标年、月份中的天数
输入:起始日期:mm-dd-yyyy 与给定天数 days
输出:目标日期:mm-dd-yyyy
要点:(1)闰年的计算;(2)当月份或天数 "溢出"时的处理(如天数增加超过该月天数时应向月份进位,或月份增加超过一年所含月数(1年12个月)时则应向年份进位)。
编程实现:
已知日期,格式为mm-dd-yyyy(月-日-年,如2003年9月10日为:9-10-2003),给定一个天数(如100天),计算:从该日期算起,经过给定天数之后的日期。
主要思想:
1、当给定的天数days大于或等于365(或366)时,计算目标年份
2、当给定的天数days小于365(或366)时,计算目标年份中的月份
3、当剩余天数不足一月时,计算目标年、月份中的天数
输入:起始日期:mm-dd-yyyy 与给定天数 days
输出:目标日期:mm-dd-yyyy
要点:(1)闰年的计算;(2)当月份或天数 "溢出"时的处理(如天数增加超过该月天数时应向月份进位,或月份增加超过一年所含月数(1年12个月)时则应向年份进位)。
编程实现:
#include <stdio.h> struct Date { int year; int month; int day; }; int normalMonthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool leapYear(int year) {//leap year judgement if(year %4 ==0 && year%100 !=0 || year %400 ==0) return true; return false; } Date getNewDate(Date initDate, int diffDays) { Date reDate = initDate; //1.get years (days >=366 or 365) int daysAyear = 365; if(leapYear(reDate.year)) {//if leap year daysAyear = 366; } while(diffDays/daysAyear) { diffDays = diffDays - daysAyear; reDate.year ++; if(leapYear(reDate.year)) { daysAyear = 366; } } //2.get months (days < 366 or 365) if(leapYear(reDate.year)) { normalMonthDays[2]=29; } while(diffDays/normalMonthDays[reDate.month]) { diffDays = diffDays - normalMonthDays[reDate.month]; reDate.month++; if(reDate.month >= 13) { reDate.year++; if(leapYear(reDate.year)) { normalMonthDays[2]=29; } reDate.month = reDate.month%12; } } //3.get days if(leapYear(reDate.year)) { normalMonthDays[2]=29; } if(diffDays + reDate.day <= normalMonthDays[reDate.month]) reDate.day = diffDays + reDate.day; else { reDate.day = diffDays + reDate.day - normalMonthDays[reDate.month]; reDate.month++; if(reDate.month > 12) { reDate.year++; reDate.month = reDate.month%12; } } return reDate; } int main(void) { Date initDate; int diffDays=0; scanf("%d-%d-%d",&initDate.month, &initDate.day, &initDate.year); scanf("%d", &diffDays); Date reDate = getNewDate(initDate, diffDays); printf("%d-%d-%d\n",reDate.month, reDate.day, reDate.year); return 0; }
相关文章推荐
- C语言实现日期和一年中的天数的相互转化
- C语言实现输入一个日期,返回第二天的日期
- C语言实现时间差、星期、天数算日期(转)
- 计算任意2个日期之间的天数(C语言实现)
- Android编程实现根据不同日期计算天数差的方法
- c语言sockt实现通过浏览器访问ip返回数据
- C语言计算日期A到日期B的天数
- C语言中返回字符串函数的四种实现方法
- c语言实现谷歌笔试题:返回参数二进制中1的个数
- 【c语言】递归实现,输入一个非负整数,返回组成它的数字之和
- js 实现YYYY-MM-DD日期加上天数得到新的日期
- 【7.11】为Date类重载“+”运算符,实现在某一个日期上(月、日、年)加一个天数。
- 时间戳转日期的算法(C语言实现)
- 实现日期往前或往后或跳转到指定月份或天数
- Datedifff返回两个日期之间的天数
- javascript完美实现给定日期返回上月日期的方法
- c实现任给两日期计算相隔天数问题
- SELECT语句中执行条件逻辑( 返回两个日期之间的天数 )
- Java实现增加天数得到新的日期
- c语言实现清屏以及显示当前日期