两个日期之间的秒数差异?

时间:2011-11-28 10:39:28

标签: c++ time

问题很简单,其他语言中有许多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);
}

哪个效果很好。

2 个答案:

答案 0 :(得分:3)

要从YY/MM/DD HH:mm:SS转换为struct tm,您可以使用strptime(如果您没有,则可以使用等效词)

const char * dateInput;
// ....
struct tm tm;
time_t val;

memset(&tm, 0, sizeof(struct tm));
strptime(dateInput,"%y/%m/%d %H:%M:%S",&tm);
val = mktime(&tm);

获得两个time_t值后,您可以拨打difftime

答案 1 :(得分:0)

新的C ++ 11有chrono库(也可以从boost获得,非C ++ 11编译器)

有了它,你可以做一些漂亮的事情,比如

boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();
// ...
boost::chrono::duration<double> sec = boost::chrono::system_clock::now() - start;
std::cout << "took " << sec.count() << " seconds\n";

typedef boost::chrono::duration<long, boost::ratio<60> > minutes;
minutes m1(3);                 // m1 stores 3
minutes m2(2);                 // m2 stores 2
minutes m3 = m1 + m2;          // m3 stores 5