我有以下变量:
int year = 2013;
int month = 04;
int day = 07;
int hour = 13;
int min = 42;
int sec = 00;
...我需要从他们那里提取“纪元”时间或unix时间。
如何在标准C中完成? 在这种情况下,unix时间应为:1365342120。
答案 0 :(得分:3)
怎么样:
struct tm tm = {
.tm_sec = sec,
.tm_min = min,
...
};
time_t t = mktime(&tm);
printf("%ju\n", (uintmax_t) t);
正如Mppl指出的那样,在使用它之前你应该知道struct tm
的怪癖:
tm_mon
被定义为自1月以来的个月,因此您需要从月中减去1 tm_year
被定义为自1900年以来年,因此您需要从年份中减去1900 在一个更迂腐的旁注中,没有什么能保证将t转换成整数会自动给你自1970年以来的秒数。它适用于许多系统,但标准没有为此做出规定。
如果你想要标准疯狂,你可以让另一个time_t
代表1970
,然后在两者之间做difftime
:你会得到一个简单诚实的差异{ {1}}。
答案 1 :(得分:3)
如果你从未使用过这个结构,上面的回答会遗漏你可能没注意到的一些事情:
struct tm myTm = {
.tm_sec = sec,
.tm_min = min,
...
.tm_mon= mon-1,
.tm_year= year-1900,
};
time_t t = mktime(&myTm);
printf("%ju\n", (uintmax_t) t);
你应该减去1到月,1900到年,否则你会得到错误的答案。