2013-06-26 70 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盒子上返回一个负值。 –