首页 > 其他分享 >计算日期

计算日期

时间:2023-09-20 21:22:08浏览次数:37  
标签:startDate endDate int days 日期 计算 year day

输入一个日期startdate(年、月、日)和天数days(>=1),输出自该输入日期days天后的日期enddate(即edate=startdate+days)。要求输入和输出的年份为四位整数,输入时要对输入数据的有效性进行检查,并确保得到有效的输入数据。同时需耍考虑跨月、跨年和闰年等情况,闰年用自定义函数计算,日期用自定义结构体描述。

#include <stdio.h>

// 自定义日期结构体
struct Date {
    int year;
    int month;
    int day;
};

// 判断是否为闰年的函数
int isLeapYear(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        return 1; // 是闰年
    } else {
        return 0; // 不是闰年
    }
}

// 计算日期加上指定天数后的日期的函数
struct Date calculateEndDate(struct Date startDate, int days) {
    struct Date endDate = startDate;
    
    while (days > 0) {
        // 计算当月的最大天数
        int maxDaysInMonth;
        switch (endDate.month) {
            case 4:
            case 6:
            case 9:
            case 11:
                maxDaysInMonth = 30;
                break;
            case 2:
                if (isLeapYear(endDate.year)) {
                    maxDaysInMonth = 29;
                } else {
                    maxDaysInMonth = 28;
                }
                break;
            default:
                maxDaysInMonth = 31;
        }
        
        // 计算剩余天数
        int daysToAdd = (days < maxDaysInMonth - endDate.day + 1) ? days : (maxDaysInMonth - endDate.day + 1);
        
        // 更新日期
        endDate.day += daysToAdd;
        days -= daysToAdd;
        
        if (endDate.day > maxDaysInMonth) {
            endDate.day = 1;
            endDate.month++;
        }
        
        if (endDate.month > 12) {
            endDate.month = 1;
            endDate.year++;
        }
    }
    
    return endDate;
}

int main() {
    struct Date startDate, endDate;
    int days;
    
    // 输入年份、月份和日期
    printf("请输入年份:");
    scanf("%d", &startDate.year);
    printf("请输入月份:");
    scanf("%d", &startDate.month);
    printf("请输入日期:");
    scanf("%d", &startDate.day);
    
    // 输入要添加的天数
    printf("请输入要添加的天数:");
    scanf("%d", &days);
    
    // 计算结束日期
    endDate = calculateEndDate(startDate, days);
    
    // 输出结果
    printf("开始日期:%d年%d月%d日\n", startDate.year, startDate.month, startDate.day);
    printf("结束日期:%d年%d月%d日\n", endDate.year, endDate.month, endDate.day);
    
    return 0;
}

 

标签:startDate,endDate,int,days,日期,计算,year,day
From: https://www.cnblogs.com/daiang/p/17718445.html

相关文章

  • 符号计算辅助密码学
    例题BUU-DASbook-happy#以下四行已知c=0x7a7e031f14f6b6c3292d11a41161d2491ce8bcdc67ef1baa9ee=0x872a335#q+q*p^3=1285367317452089980789441829580397855321901891350429414413655782431779727560841427444135440068248152908241981758331600586#qp+q*p^2=......
  • Vue的DatePicker日期选择器
    picker-option属性官网描述是这样的 1.disabledDate一般我们使用picker-option都是通过disabledDate参数,来设置其日期选择区间,代码如下:<el-col:span="12"><el-form-itemlabel="开票日期起"prop="rqq"><el-date-pickert......
  • 根据身份证号 判断男女、 获取出生日期、
    //通过截取身份证号码的最后两位,进行取余数来判断奇数偶数letsex= value.substring(16,17);//IDcard为用户输入的身份证号码returnsex%2==1?'男':'女'; //通过截取对应位置拼接对应的字符组成格式为yyyy-mm-ddletbirthday=value.substring(6,10)+"-"+......
  • 用程序解决数学题:小马虎在计算123乘一个一位数时,把123错看成128,所得的结果比正确的结
    小马虎在计算123乘一个一位数时,把123错看成128,所得的结果比正确的结果大20,正确的结果是什么?internalclassProgram{staticvoidMain(string[]args){//小马虎在计算123乘一个一位数时,把123错看成128,//所得的结果比正确的结果大20,正确的结果是什......
  • ORACLE日期时间函数大全
    ORACLE日期时间函数大全  TO_DATE格式(以时间:2007-11-02  13:45:25为例)         Year:            yytwodigits两位年               显示值:07       yyythreedigits三位年               显示值......
  • Springboot 全局日期时间格式处理
    From: https://www.cnblogs.com/Baker-Street/p/16156297.html大家伙在日常开发中可能都遇到过,前端传递的时间字符串,后台如果用日期接收(Date或者jdk8的Local日期)接收,经mvc接收后就报错了,先解析原因:1.get请求和post表单请求中如果含有时间字符串,则spring底层是用的Par......
  • 【精品】SpringBoot统一日期类型处理
    From: https://blog.csdn.net/lianghecai52171314/article/details/127106664方案一:给日期字段添加注解/***创建时间*///返回时间类型@JsonFormat(pattern=GlobalConst.DATETIME_PATTERN,timezone="GMT+8")//接收时间类型@DateTimeFormat(pattern=GlobalConst.DATETIM......
  • (笔记)Linux修改、查看日期和时间的方法
      1、查看时间、日期#dateFriJan1114:04:10CST2019 2、修改时间语法:date-s"时:分:秒"#date-s"17:20:30" 3、修改日期、时间语法:date-s"年-月-日时:分:秒"#date-s"2019-01-1114:21:30"注意:设置时间需要使用双引号括起来,否则会报错。 ......
  • java日期操作
    将Date类型写入数据库的两种方法先了解几个类: 1、具体类(和抽象类相对)java.util.Date 2、抽象类java.text.DateFormat和它的一个具体子类,java.text.SimpleDateFormat 3、抽象类java.util.Calendar和它的一个具体子类,java.util.GregorianCalendar......
  • js 前端 时间日期 月份 日期不满10 前面加0
    法一://获取当前日期的yyyy-MM-dd格式vardate=newDate();varyear=date.getFullYear();varmonth=date.getMonth()+1<10?"0"+(date.getMonth()+1):date.getMonth()+1;varday=date.getDate()<10?"0"+date.getDate():date.get......