2013-06-26 81 views
-2

我試圖用mktimedifftime來計算兩個日期之間的日期差異。其中一個日期是另一個struct內的struct tm,另一個日期是main內部的struct tmmktime正常工作main內的日期,但在struct內保持返回-1的日期。 我想我忽略瞭如何訪問struct中的struct,但我無法找到答案。提前致謝。struct tm在另一個struct中 - c

的代碼如下

#include <stdio.h> 
#include <time.h> 

struct consulta_cand { 
    struct tm nascimento; 
}; 

int main(void) 
{ 
    struct consulta_cand candidato; 
    time_t now; 
    struct tm final2012; 
    double timeprint; 

    now = time(NULL); 
    final2012 = *localtime(&now); 
    final2012.tm_mday = 28; 
    final2012.tm_mon = 10 - 1; 
    final2012.tm_year = 2012 - 1900; 
    final2012.tm_hour = 23; 
    final2012.tm_min = 59; 
    final2012.tm_sec = 59; 

    timeprint = mktime(&final2012); 
    printf("%.f\n", timeprint); 

    candidato.nascimento = *localtime(&now); 
    candidato.nascimento.tm_mday = 14; 
    candidato.nascimento.tm_mon = 10 - 1; 
    candidato.nascimento.tm_year = 1967 - 1900; 
    candidato.nascimento.tm_hour = 0; 
    candidato.nascimento.tm_min = 0; 
    candidato.nascimento.tm_sec = 0; 

    timeprint = mktime(&candidato.nascimento); 
    printf("%.f\n", timeprint); 

    return 0; 
} 
+0

你在測試哪個操作系統? – alk

+0

Windows 7,帶有TDM-GCC 64位 –

回答

0

結構被訪問的方式沒有問題。 問題是1970年之前mktime()不接受的日期。

0

這些日期的功能是基於紀元年:1970年您使用1967年。另外:Dennis Ritchie想要在1970年的時代,以便價值觀(包括消極的和積極的)會跨越他的整個生活。 (或者他曾在接受採訪時說過)

+0

謝謝,問題恰恰在於此。 –

0

你確定它會返回-1,但不是簡單的負值,典型的-69987600是從1970年1月1日(回到)到1967年10月14日的秒數?

即1967年的日期是大紀元時間開始之前,所以它的時代表示是是負面

+0

是的,在Windows上,它返回-1,當我試着在一個* nix盒子上返回一個負值。 –