我正在尝试使用{ 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,但我认为我错了。非常感谢 !
答案 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函数setenv
和tzset
编写自己的函数来临时更改时区。
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;
}