[英]Converting time_t to int
I want to convert a given time into epoch(time_t) and vice versa.我想将给定的时间转换为纪元(time_t),反之亦然。 can anyone tell what is the routine or algorithm for this?谁能说出这的例程或算法是什么?
Thanks谢谢
Update更新
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
but this always return 32399 for some reason.但这总是出于某种原因返回 32399 。
You should cast it to a long int
instead of int
.您应该将其转换为long int
而不是int
。
long int t = static_cast<long int> (time(NULL));
An int
might not be enough to hold the time, for example, on my platform, time_t
is a typedef
of __int64
. int
可能不足以容纳时间,例如,在我的平台上, time_t
是__int64
的typedef
。
Whatever you're doing with time_t
, you'll probably be best off using the <chrono>
library.无论您使用time_t
做什么,最好使用<chrono>
库。 Then you can convert to and from time_t
, if necessary.然后,您可以根据需要在time_t
进行转换。 Hopefully you can just do what you need in <chrono>
希望你可以在<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);
}
The C++ standard library doesn't yet have an API for dates as good as <chrono>
is for time. C++ 标准库还没有像<chrono>
适用于时间的 API。 You can use the Boost date library or you can fall back on the C date library:您可以使用 Boost 日期库,也可以使用 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';
}
To convert a struct tm
to a time_t
, use mktime
.要将struct tm
转换为time_t
,请使用mktime
。 To convert a time_t
to a struct tm
, use either gmtime
or localtime
.要将time_t
转换为struct tm
,请使用gmtime
或localtime
。
Sample :样品:
#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";
}
#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); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.