问题很简单,在其他语言中有很多API特定的方法,但我没有发现这对于跨平台C++使用来说简单直接。两个日期之间的秒差?
如果我有两个日期,并且它们被假定为在相同的语言环境中,那么在C++中区分它们的最简单方法是什么?
我有(有点)看着使用time.h
,创建两个tm
对象,将它们转换为UTC然后区分它们。
的日期目前的格式为:YY/MM/DD HH:mm:SS
(存储为单个整数)
编辑:
好了,根据目前的答案,我已经做了以下的(现在):
time_t calculate_seconds_between(
const uint Y1, const uint M1, const uint D1, const uint H1, const uint m1, const uint S1, // YY/MM/DD HH:mm:SS
const uint Y2, const uint M2, const uint D2, const uint H2, const uint m2, const uint S2
)
{
time_t raw;
time(&raw);
struct tm t1 = *gmtime(&raw), t2 = t1;
t1.tm_year = Y1 - 1900;
t1.tm_mon = M1 - 1;
t1.tm_mday = D1;
t1.tm_hour = H1;
t1.tm_min = m1;
t1.tm_sec = S1;
t2.tm_year = Y2 - 1900;
t2.tm_mon = M2 - 1;
t2.tm_mday = D2;
t2.tm_hour = H2;
t2.tm_min = m2;
t2.tm_sec = S2;
time_t tt1, tt2;
tt1 = mktime(&t1);
tt2 = mktime(&t2);
return (tt2 - tt1);
}
这很好。
请注意,两次之间的差异不取决于时区,只要它是一致的即可。即17:00:00(UTC + 1)和17:05:00(UTC + 1)之间的差异与16:00:00(UTC)和16:05:00(UTC)之间的差异相同。 (夏令时确实是另一个时区;请注意这一点)。 – MSalters
@ MSalters,是的,我刚刚意识到这一点。有时候只是写出这个问题给出了产生答案所需的清晰度......这是令人沮丧的,因为我通常使用SO作为我的最后手段(即,几个小时过去)。干杯:) – dcousens
@Daniel你为什么使用gmtime?您需要更新哪些字段? – selalerer