| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 19310 人关注过本帖
标题:计算任意两个日期的天数
只看楼主 加入收藏
嘲风
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-12-22
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:10 
计算任意两个日期的天数
  在线等   编写一个C程序计算任意两个日期之间间隔天数,要求以yyyy-mm-dd的格式不分先后输入两个有效日期,计算他们之间的间隔天数。
搜索更多相关主题的帖子: 在线 
2017-01-06 08:23
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
所谓的间隔如何定义:

比如 3日到4日 之间 间隔 0天 or 1天  or  2天  ????

DO IT YOURSELF !
2017-01-06 08:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
请输入起始日期 输入格式yyyy-mm-dd:
2015-01-01
请输入终止日期 输入格式yyyy-mm-dd:
2015-01-02
2015年 1月 1日  到 2015年 1月 2日 间隔        1 天.

DO IT YOURSELF !
2017-01-06 08:59
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:8 
程序代码:
#include <stdio.h>

//获取公历年的天数
int year_alldays(int year)
{
    if((year%4==0 && year%100!=0) || year%400==0) return 366; else return 365;
}

//获取公历年初至某整月的天数
int year_sumday(int year,int month)
{
    int sum=0;
    int rui[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int ping[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int ruiflag=0;
    if((year%4==0 &&year%100!=0) || year%400==0) ruiflag=1;
    for(int index=0;index<month-1;index++)
    {
        if(ruiflag==1) sum+=rui[index];else sum+=ping[index];
    }
    return sum;
}
//获取从公历1800年1月25日至当前日期的总天数
int get_g_alldays(int year,int month,int day)
{
    int i=1800,days=-24;
    while(i<year)
    {
        days+=year_alldays(i);
        i++;
    }
    int days2=year_sumday(year,month);
    return days+days2+day;
}

int main(void)
{
    int year1,year2,month1,month2,day1,day2;
    printf("请输入起始日期 输入格式yyyy-mm-dd:\n");
    scanf("%d-%d-%d",&year1,&month1,&day1);
    printf("请输入终止日期 输入格式yyyy-mm-dd:\n");
    scanf("%d-%d-%d",&year2,&month2,&day2);
    int days1=get_g_alldays(year1,month1,day1);
    int days2=get_g_alldays(year2,month2,day2);
    int sout=0;
    if(days1>=days2) sout=days1-days2;else sout=days2-days1;
    printf("%4d年%2d月%2d日  到 %4d年%2d月%2d日 间隔 %8d 天.\n",year1,month1,day1,year2,month2,day2,sout);
    return 0;
}

DO IT YOURSELF !
2017-01-06 09:03
嘲风
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-12-22
收藏
得分:0 
回复 4楼 wp231957
我写的这个代码问题出在哪点了?
#include<stdio.h>
int p;
int ping[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int year_allday(int year)
{
    if((year%4==0)&&(year%100!=0))
        {
            p=366;
            ping[2]=29;
    }
    else
        if(year%400==0)
        {
            p=366;
            ping[2]=29;
        }
        else
            p=365;
    return p;
}
void swap(int *x,int *y)
{
    int t;
        t=*y;
        *y=*x;
        *x=t;
}
int main()
{
    int year1,year2,month1,month2,day1,day2,count_days=0;
    int years,i,*pointer1,*pointer2;
    pointer1=&year1;
    pointer2=&year2;
    printf("请以yyyy-mm-dd的形式输入年份:\n");
    scanf("%d-%d-%d",&year1,&month1,&day1);
    printf("请以yyyy-mm-dd的形式输入年份:\n");
    scanf("%d-%d-%d",&year2,&month2,&day2);
    year_allday(year1);
    for(int m=0;m<month1+1;m++)
        count_days+=ping[m];
    count_days+=day1;
    year_allday(year2);
    for(int n=0;n<month2;n++)
        count_days-=ping[n];
    count_days-=day2;
    if(year1>year2)
        swap(pointer1,pointer2);
    for(int y=year1;y<year2;y++)
    {   
        year_allday(y);
        count_days+=p;
    }
    printf("相差了%d天\n",count_days);
}
   
2017-01-07 18:00
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
主函数主体算法我感觉还比较乱 再理顺一下

DO IT YOURSELF !
2017-01-07 21:42
秋寂
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2016-10-1
收藏
得分:2 
回复 5楼 嘲风
你的int year_allday(int year)的返回值你没用到过,你把这个函数当做空函数执行了
for(int y=year1;y<year2;y++)
    {   
        year_allday(y);
        count_days+=p;
    }
p是子函数中的,不是主函数中的,你的int year_allday(int year)返回值应该在主函数中定义一个变量去储存这个值


努力学习!
2017-01-07 23:18
嘲风
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-12-22
收藏
得分:0 
回复 7楼 秋寂
p 不是全局变量吗?并且 我是输入不同的年份,那个p也会输出不同的数据是满足情况的啊!
2017-01-10 16:33
秋寂
Rank: 1
等 级:新手上路
帖 子:12
专家分:3
注 册:2016-10-1
收藏
得分:0 
回复 8楼 嘲风
额额,抱歉,没注意到p是全局的


努力学习!
2017-01-19 14:04
g1324522527
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-1-11
收藏
得分:0 
回复 5楼 嘲风
#include<stdio.h>
int p,year_days;
int ping[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void year_allday(int year)
{
    if((year%4==0)&&(year%100!=0)||(year%400==0))
        {
            p=366;
            ping[2]=29;
    }
    else
            p=365;
}
int main()
{
    int year1,year2,month1,month2,day1,day2,count_days=0;
    printf("请以yyyy-mm-dd的形式输入年份:\n");
    scanf("%d-%d-%d",&year1,&month1,&day1);
    printf("请以yyyy-mm-dd的形式输入年份:\n");
    scanf("%d-%d-%d",&year2,&month2,&day2);
    year_allday(year2);
    for(int m=0;m<month2;m++)
        count_days+=ping[m];
    count_days+=day2;
    year_allday(year1);
    for(int n=0;n<month1;n++)
        count_days-=ping[n];
    count_days-=day1;
    if(year2>year1)
    {
        for(int y=year1;y<year2;y++)
        {   
            year_allday(y);
            year_days+=p;
        }
            count_days+=year_days;
    }
    if(year1>year2)
    {
        for(int y=year2;y<year1;y++)
        {   
            year_allday(y);
            year_days+=p;
        }
            count_days=year_days-count_days;

    }
    printf("相差了%d天\n",count_days);
    return 0;
}

[此贴子已经被作者于2018-1-11 09:24编辑过]

2018-01-11 09:21
快速回复:计算任意两个日期的天数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029095 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved