【问题标题】:struct tm inside another struct - c结构 tm 在另一个结构内 - c
【发布时间】:2013-06-23 20:25:13
【问题描述】:

我正在尝试使用mktimedifftime 计算两个日期之间的日期差。其中一个日期是另一个struct 内的struct tm,另一个日期是main 内的struct tmmktimemain 中的日期可以正常工作,但在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;
}

【问题讨论】:

  • 你在哪个操作系统上测试这个?
  • Windows 7,带有 TDM-GCC 64 位

标签: c struct mktime localtime time-t


【解决方案1】:

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

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

【讨论】:

  • 是的,在 Windows 上它返回 -1,当我在 *nix 盒子上尝试时它返回一个负值。
【解决方案2】:

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

顺便说一句:丹尼斯·里奇(Dennis Ritchie)想要 1970 年的时代,这样价值观(无论是消极的还是积极的)都会贯穿他的一生。 (或者他曾经在一次采访中说过。)

【讨论】:

  • 谢谢,问题就是这样。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2017-04-11
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2015-05-24
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多