本地时间函数的奇怪行为

时间:2015-05-26 09:17:24

标签: c++

我试图从当前日期减去7天并将它们发送给一个函数。我的代码是:

time_t startTime;
time_t endTime;
struct tm *startDate;
struct tm *endDate;

time(&endTime);
endDate = localtime(&endTime); //here endDate becomes 26-05-2015

startTime = endTime - 24 * 60 * 60 * 7;
startDate = localtime(&startTime);

然而在此之后,endDate和startDate都变为19-05-2015

我哪里错了?

3 个答案:

答案 0 :(得分:3)

允许localtime为字符串使用内部(static)缓冲区,这意味着您需要复制返回的字符串,或者使用localtime_s代替。

答案 1 :(得分:1)

std::localtime()函数返回指向静态struct的指针,因此每次都返回相同的地址。

您可以像这样复制std::localtime()的回复:

#include <ctime>

int main()
{
    time_t startTime;
    time_t endTime;

    // don't use pointers
    std::tm startDate;
    std::tm endDate;

    time(&endTime);

    // dereference the return value (with *) to make a copy
    endDate = *std::localtime(&endTime); 

    startTime = endTime - 24 * 60 * 60 * 7;
    startDate = *std::localtime(&startTime);
}

答案 2 :(得分:1)

它们都是同一结构的指针。声明您自己的struct tm变量并复制localtime()返回值指向的内容:

struct tm startDate, endDate;
....
endDate   = * localtime(&endTime);
....
startDate = * localtime(&startTime);