计算 C 的时间差(天、小时、分钟、秒)

标签 c time date-arithmetic

我尝试计算天/小时/分钟/秒之间的时间差,但结果不好。 我尝试降低它们,然后在几秒钟内转动它们,然后我将它们恢复到相同的格式(D/H/M/S)。 我的目标是计算两次之间花费的时间。喜欢: 1天2小时3分54秒以及 3天3小时10分23秒。 这是我尝试过的:

#include <stdio.h>
#include <stdlib.h>

int main()
{
     int day1, hour1, min1, sec1, day2, hour2, min2, sec2, totalTime;
    printf("Enter input:");
     scanf("%d%d%d%d%d%d%d%d", &day1, &hour1, &min1, &sec1, &day2, &hour2, &min2, &sec2);
     totalTime = (day2-day1)*86400 + (hour2-hour1)*3600 + (min2-min1)*60 + (sec2-sec1);

     printf("D: %d\n", totalTime / 86400);
     totalTime = totalTime % 86400;

     printf("H: %d\n", totalTime / 3600);
     totalTime = totalTime & 3600;

     printf("M: %d\n", totalTime / 60);
     totalTime = totalTime % 60;

     printf("S: %d\n", totalTime);

    return 0;
}

但是没有像我预期的那样工作。

最佳答案

鉴于这是一种糟糕的计算时间差的方法,存在两个问题:

  1. scanf 无法分隔整数
  2. 时差错误

试试这个:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int day1, hour1, min1, sec1, day2, hour2, min2, sec2, totalTime;
    printf("Enter input:");
    scanf("%d,%d,%d,%d,%d,%d,%d,%d", &day1, &hour1, &min1, &sec1, &day2, &hour2, &min2, &sec2);
    totalTime = (day2 - day1) * 86400 + (hour2 - hour1) * 3600 + (min2 - min1) * 60 + (sec2 - sec1);

    printf("D: %d\n", totalTime / 86400);
    totalTime = totalTime % 86400;

    printf("H: %d\n", totalTime / 3600);
    totalTime = totalTime % 3600;

    printf("M: %d\n", totalTime / 60);
    totalTime = totalTime % 60;

    printf("S: %d\n", totalTime);

    return 0;
}

计算时差的更好方法是使用 difftime功能

关于计算 C 的时间差(天、小时、分钟、秒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45792061/

相关文章:

c - 如何创建一个新线程以使 pcap_loop() 和 gtk_main() 兼容?

C Memory free in loop error -> 大小为 1 的无效读取

c++ - C 和 C++ 代码之间的不兼容

php - 如果有很多请求,如何获取数据

mysql - 我如何按时订购查询

c++ - 如何比较两个 tm(来自 ctime)变量

sql - 计算PostgreSQL中2个日期之间的工作时间

c - 过滤掉 IPv6 多播地址范围

android - 在android中比较两次

java - 在 Java 中计算时间,例如。 1900-1710 = 110 分钟