c++ - 尝试使用 time.h 库计算两个日期之间的差异

标签 c++ c time time.h

我正在尝试使用我自己的日期结构计算我给出的两个日期之间的确切差异,我现在正在测试返回差异的函数:

Date dateDifference(Date a, Date b){
    time_t rawtime,timeA,timeB;
    struct tm* tA,*tB;
    double difference;

    time(&rawtime);
    tA = tB = localtime(&rawtime);

    tA->tm_mday = 20;
    tA->tm_mon = 1;
    tA->tm_year = 115;

    tB->tm_mday = 3;
    tB->tm_mon = 10;
    tB->tm_year = 89;

    timeA = mktime(tA);
    timeB = mktime(tB);

    difference = difftime(timeA, timeB);
}

如您所见,我在两个“tm”结构中提供了一些手动编号以对其进行测试。 当我调试时,我在“timeA”和“timeB”中得到完全相同的值。 我不是很熟悉 time.h 函数,因此我正在使用我在网上找到的知识来做这件事,这是我成功实现的最好结果。

我做错了什么?

最佳答案

你遇到的两个问题是:

localtime() 返回指向其自身静态内存中结构的指针。您应该在再次调用 localtime() 之前复制该结构。

您没有为两个 tm 结构分配任何内存 - 我已将它们从指针更改为简单结构。

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

int main()
{
    time_t timeA, timeB;
    struct tm tA, tB, *tptr;
    double difference;

    time(&timeA);
    time(&timeB);
    tptr = localtime(&timeA);
    tA = *tptr;
    tptr = localtime(&timeB);
    tB = *tptr;

    tA.tm_mday = 20;
    tA.tm_mon = 1;
    tA.tm_year = 115;

    tB.tm_mday = 3;
    tB.tm_mon = 10;
    tB.tm_year = 89;

    timeA = mktime(&tA);
    timeB = mktime(&tB);

    difference = difftime(timeA, timeB);
    printf ("Difference is %.0f seconds\n", difference);
    return 0;
}

程序输出:

Difference is 798336000 seconds

关于c++ - 尝试使用 time.h 库计算两个日期之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28048839/

相关文章:

c++ - 为什么不能在类范围内推导我的类静态自动函数的类型?

c++ - 从目录中读取文件名

c++ - qPicture::play 函数有什么作用?

c - 从 const char 指针到 char 指针的赋值不给出警告

java - 计算关闭时间毫秒到时间

c++ - 复制构造函数是否调用默认构造函数来创建对象

python - 痛饮,py + C : no attribute under pointer

c - 如何在 C 中复制涉及指针的结构?

javascript - 每隔一分钟运行一次 JS 函数

java - 将人类时间与计算机时间结合成合成时间