我有以下變量獲得UNIX時間:從日期
int year = 2013;
int month = 04;
int day = 07;
int hour = 13;
int min = 42;
int sec = 00;
...我需要提取「時代」的時候,或者UNIX時間,從他們身上。
這是如何在標準C中完成的? 在這種情況下,unix時間應該是:1365342120。
我有以下變量獲得UNIX時間:從日期
int year = 2013;
int month = 04;
int day = 07;
int hour = 13;
int min = 42;
int sec = 00;
...我需要提取「時代」的時候,或者UNIX時間,從他們身上。
這是如何在標準C中完成的? 在這種情況下,unix時間應該是:1365342120。
以上回答錯過了一些東西,你可能不會注意到,如果你從來沒有用過這個結構:
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年,否則你會得到錯誤回答。
如何:
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
因爲一月被定義爲個月,所以你需要從月份減去1tm_year
定義爲自1900年以來,所以你需要從當年減去1900在更迂腐側面說明,沒有任何擔保轉換牛逼到一個整數會自動給你從1970年開始它的工作在許多系統上,但秒數該標準對此沒有規定。
如果你想去標準瘋狂,你可以再拍time_t
代表1970
,然後做兩個之間difftime
的:你會得到的差值作爲一個普通的誠實double
。
這就是我想說:)投票〜 – noalac 2013-04-07 12:37:35
它出於某種原因與-1970運作良好。 – David 2013-04-07 14:11:51