关于#c语言#的问题:定义一个表示日期、时间的结构体,输入任意两个时间,计算两个时间的时间差(天、 小时、分钟、秒、ms)

定义一个表示日期、时间的结构体,输入任意两个时间,计算两个时间的时间差(天、 小时、分钟、秒、ms)

同一转换成毫秒计算差值,然后再转成天、小时、分钟、秒、毫秒。
两个测试运行结果:

img

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
typedef struct _date
{
    int year, mon, day;
    int hour, min, sec;
    int ms; 
}Date;

//判断是否是闰年
int isleapyear(int year)
{
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        return 1;
    else
        return 0;
}

//计算两个日期之间相差的毫秒数
long long cmp(Date d1, Date d2)
{
    int mon[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    long long sec = 0;
    long long n1 = 0, n2 = 0;
    int i;
    Date t;
    if (d1.year > d2.year)
    {
        t = d1;
        d1 = d2;
        d2 = t;
    }
    if (isleapyear(d1.year))
        mon[2] = 29;
    //计算d1本年已经过了多少秒
    for (i = 0; i < d1.mon; i++)
        n1 += mon[i];
    n1 = n1 * 24* 3600; //转成秒数
    n1 = n1 + (d1.day - 1) * 24 * 3600 + d1.hour * 3600 + d1.min * 60 + d1.sec;
    //转毫秒
    n1 = n1 * 1000 + d1.ms;

    //计算d2到d1的差值
    for (i = d1.year; i < d2.year; i++)
    {
        if (isleapyear(i))
            n2 += 366;
        else
            n2 += 365;
    }
    if (isleapyear(d2.year))
        mon[2] = 29;
    else
        mon[2] = 28;
    for (i = 0; i < d2.mon; i++)
    {
        n2 += mon[i];
    }
    n2 += d2.day - 1; //得到天数
    n2 = n2 * 24 * 3600 + d2.hour * 3600 + d2.min * 60 + d2.sec; //得到秒数
    //转毫秒
    n2 = n2 * 1000 + d2.ms;

    sec = n2 - n1;
    return sec; //返回两者差的毫秒数
}




int main()
{
    Date d1, d2;
    long long s = 0;
    int day, hour, min, sec, ms;
    printf("请输入时间1的年 月 日 时 分 秒 毫秒:");
    scanf("%d %d %d %d %d %d %d", &d1.year, &d1.mon, &d1.day, &d1.hour, &d1.min, &d1.sec,&d1.ms);
    printf("请输入时间2的年 月 日 时 分 秒 毫秒:");
    scanf("%d %d %d %d %d %d %d", &d2.year, &d2.mon, &d2.day, &d2.hour, &d2.min, &d2.sec,&d2.ms);

    s = cmp(d1,d2);
    ms = s % 1000; //毫秒数

    s = s / 1000; //转成秒
    //计算天
    day = s / (24 * 3600);
    s -= day * 24 * 3600;
    //计算小时
    hour = s / 3600;
    s -= hour * 3600;
    //计算分钟
    min = s / 60;
    s -= min * 60;
    //计算秒
    sec = s;
    printf("两个时间的时间差:%d天%d小时%d分钟%d秒%dms", day, hour, min, sec, ms);
    return 0;

}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632