将time_t转换为int

时间:2012-02-28 14:42:40

标签: c++ epoch

我想将给定时间转换为纪元(time_t),反之亦然。任何人都能说出这个例程或算法是什么?

由于

更新

 epoch_strt.tm_sec = 0;
 epoch_strt.tm_min = 0;
 epoch_strt.tm_hour = 0;
epoch_strt.tm_mday = 1;
epoch_strt.tm_mon = 1;
epoch_strt.tm_year = 70;
 epoch_strt.tm_isdst = -1;

double nsecs = difftime(curtime, basetime);//current time from system, I converrting it to struct tm

但由于某种原因,这总是会返回32399.

3 个答案:

答案 0 :(得分:10)

您应该将其投放到long int而不是int

long int t = static_cast<long int> time(NULL);

int可能不足以占用时间,例如,在我的平台上,time_ttypedef __int64

答案 1 :(得分:1)

无论您使用time_t做什么,您最好使用<chrono>库。然后,您可以根据需要转换为time_t和来自<chrono>。希望您可以在#include <chrono> int main() { auto a = std::chrono::system_clock::now() time_t b = std::chrono::system_clock::to_time_t(a); auto c = std::chrono::system_clock::from_time_t(b); }

中完成所需的操作
<chrono>

更新

C ++标准库还没有适用于#include <ctime> #include <chrono> #include <iostream> int main() { std::tm epoch_start = {}; epoch_start.tm_sec = 0; epoch_start.tm_min = 0; epoch_start.tm_hour = 0; epoch_start.tm_mday = 1; epoch_start.tm_mon = 0; epoch_start.tm_year = 70; epoch_start.tm_wday = 4; epoch_start.tm_yday = 0; epoch_start.tm_isdst = -1; std::time_t base = std::mktime(&epoch_start); auto diff = std::chrono::system_clock::now() - std::chrono::system_clock::from_time_t(base); std::chrono::seconds s = std::chrono::duration_cast<std::chrono::seconds>(diff); std::cout << s.count() << '\n'; } 的日期的API。您可以使用Boost日期库,也可以使用C日期库:

{{1}}

答案 2 :(得分:0)

要将struct tm转换为time_t,请使用mktime。要将time_t转换为struct tm,请使用gmtimelocaltime

<强>示例

#include <iostream>
#include <ctime>

int main () {
    std::time_t now = std::time(0);

    std::tm *now_tm = gmtime(&now);

    std::tm tomorrow_tm(*now_tm);

    tomorrow_tm.tm_mday += 1;
    tomorrow_tm.tm_hour = 0;
    tomorrow_tm.tm_min = 0;
    tomorrow_tm.tm_sec = 0;

    std::time_t tomorrow = std::mktime(&tomorrow_tm);

    double delta = std::difftime(tomorrow, now);

    std::cout << "Tomorrow is " << delta << " seconds from now.\n";
}

<小时/> 更新2

#include <iostream>
#include <ctime>
#include <cassert>

// Display the difference between now and 1970-01-01 00:00:00
// On my computer, this printed the value 1330421747
int main () {

    std::tm epoch_strt;
    epoch_strt.tm_sec = 0;
    epoch_strt.tm_min = 0;
    epoch_strt.tm_hour = 0;
    epoch_strt.tm_mday = 1;
    epoch_strt.tm_mon = 0;
    epoch_strt.tm_year = 70;
    epoch_strt.tm_isdst = -1;

    std::time_t basetime = std::mktime(&epoch_strt);

    std::time_t curtime = std::time(0);

    long long nsecs = std::difftime(curtime, basetime);

    std::cout << "Seconds since epoch: " << nsecs << "\n";
    assert(nsecs > 42ll * 365 * 24 * 60 * 60);
}