2013-04-07 37 views
0

我有以下變量獲得UNIX時間:從日期

int year = 2013; 
int month = 04; 
int day = 07; 
int hour = 13; 
int min = 42; 
int sec = 00; 

...我需要提取「時代」的時候,或者UNIX時間,從他們身上。

這是如何在標準C中完成的? 在這種情況下,unix時間應該是:1365342120

回答

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年,否則你會得到錯誤回答。

+0

這就是我想說:)投票〜 – noalac 2013-04-07 12:37:35

+0

它出於某種原因與-1970運作良好。 – David 2013-04-07 14:11:51

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
  • tm_year定義爲自1900年以來,所以你需要從當年

減去1900在更迂腐側面說明,沒有任何擔保轉換牛逼到一個整數會自動給你從1970年開始它的工作在許多系統上,但秒數該標準對此沒有規定。

如果你想去標準瘋狂,你可以再拍time_t代表1970,然後做兩個之間difftime的:你會得到的差值作爲一個普通的誠實double