struct tm在另一个struct-c中

时间:2013-06-26 15:36:19

标签: c struct mktime localtime time-t

我正在尝试使用mktimedifftime计算两个日期之间的日期差异。其中一个日期是另一个struct tm内的struct,另一个日期是struct tm内的mainmktimemain内的日期工作正常,但对struct内的日期保持返回-1。 我想我忽略了如何访问struct内的struct非常明显但我无法找到答案。提前谢谢。

代码在

之下
#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;
}

3 个答案:

答案 0 :(得分:0)

这些日期函数基于纪元年:1970年。您使用的是1967年。

顺便说一句:丹尼斯·里奇(Dennis Ritchie)在1970年想要这个时代,以便价值观(包括消极和积极)将贯穿他的整个人生。 (或者他曾在接受采访时说过。)

答案 1 :(得分:0)

你确定它会返回-1,但不仅仅是一个负值,典型的-69987600是从1970年1月1日(回到)1967年10月14日的秒数?

那个1967年的日期是大纪元时间开始前的,所以它的Epoch表示是 negativ

答案 2 :(得分:0)

访问结构的方式没有问题。 问题是1970年以前mktime()不接受的日期。