C编程 - 计算2个日期时间的差异

时间:2017-03-21 04:51:22

标签: c date datetime

我正在尝试使用{ cd /usr/local/path/to/code; echo "hi1"; sudo chmod 777 /tmp/dissolve.log; echo "hi2"; stdbuf -oL python someapp/runner.py dissolve; echo "hi3"; } > /tmp/dissolve.log & 来计算两个不同时间日期之间的差异:它假设是这样的:

输入日期和时间getDateTime

输入日期和时间(yyyy-mm-dd hh:mm:ss): 2017-03-13 12:00:00 Start: Mon Mar 13 12:00:00 2017

差异: 30 秒。

这是我的尝试:

(yyyy-mm-dd hh:mm:ss): 2017-03-13 12:00:30 End: Mon Mar 13 12:00:30 2017

我能够以正确的格式打印它,但我如何计算以秒为单位的差异?我试图使用difftime,但我认为我错了。非常感谢 !

1 个答案:

答案 0 :(得分:0)

已经有一个解析日期的功能,strptime。这就像是日期的scanf。它遵循与strftime相同的格式代码(p表示解析,f表示格式)。

你可以做到这一点。

struct tm date;
strptime( "2017-03-13 12:00:00", "%Y-%m-%s %H:%M:%S", &date );

或使用为ISO 8601日期和时间提供的短手。

struct tm date;
strptime( "2017-03-13 12:00:00", "%F %T", &date );

取代getDateTime

一旦完成并且日期为struct tm,您可以将它们转换为自纪元(1970-01-01 00:00:00 UTC)以来的秒数并减去。自纪元以来转换为秒,time_t,使用mktime完成。然后用difftime减去。

time_t seconds1 = mktime(&date1);
time_t seconds2 = mktime(&date2);
double timediff = difftime( seconds1, seconds2 );

但老实说,你也可以seconds1 - seconds2。标准中添加了difftime以允许time_t不是一个简单的数字,但我知道没有这个例子。

mktime假设日期在当地时区。这对于在同一时区中区分两个日期无关紧要。

如果是,则存在非标准函数timegm,即mktime,但它假定它们是UTC日期。或者您可以使用POSIX函数setenvtzset编写自己的函数来临时更改时区。

time_t my_timegm(struct tm *date) {
    // Store the current TZ value.
    char *tz = getenv("TZ");

    // Unset TZ which will cause UTC to be used.
    setenv("TZ", "", 1);
    tzset();

    // Call mktime, now in UTC.
    time_t time = mktime(date);

    // Restore the TZ environment variable (or leave it unset).
    if (tz)
        setenv("TZ", tz, 1);
    else
        unsetenv("TZ");
    tzset();

    return time;
}