gpt4 book ai didi

c++ - 如何在C++中使用localtime正确初始化时间?

转载 作者:行者123 更新时间:2023-12-03 07:21:50 26 4
gpt4 key购买 nike

我正在进入纪元的开始,应该在这里获得当前时间:
date.hpp:

#ifndef DATE_HPP
#define DATE_HPP

#include <time.h>
#include <iostream>
#include <sstream>

class Date
{
std::stringstream format;
struct tm *date_tm;
time_t date;

public:
Date() : date(time(NULL)), date_tm(localtime(&date)) {}
Date(std::istream &in);
Date(std::string str);

const std::string getDate();
};

#endif //DATE_HPP
date.cpp:
#include "date.hpp"
#include <iostream>
#include <sstream>
#include <iomanip>

Date::Date(std::istream &in)
{
std::cout << "enter date [mm/dd/yy]: ";
format.basic_ios::rdbuf(in.rdbuf());
format >> std::get_time(date_tm, "%m/%d/%y");
}

Date::Date(std::string str)
{
format << str;
format >> std::get_time(date_tm, "%m/%d/%y");
}

const std::string Date::getDate()
{
format << std::put_time(date_tm, "%m/%d/%y");
return format.str();
}
main.cpp:
#include "date.hpp"
#include <iostream>

int main()
{
Date now;
std::cout << now.getDate() << std::endl;
}
当我运行 ./a.out时,我得到 01/01/70。很显然,我希望当前时间是正确的,因为 time(NULL)中使用的 localtime(now)应该包含从大纪元到现在的秒数。那么怎么可能出问题了?

最佳答案

除了注释中提到的缺陷(localtime()返回指向全局变量的指针)之外,您还遇到了施工订单问题。
在您的类中,date_tmdate之前构造/初始化,而不管它们在初始化列表中的顺序如何。
更改您的类定义以查看您期望的结果:

class Date
{
std::stringstream format;
time_t date; // ensure date is constructed/initialized before date_tm
struct tm *date_tm;

// ...
}
(请参阅: https://ideone.com/FRJrdB)
如注释中所述,如果启用了适当的警告级别,则编译器应就此警告您。

关于c++ - 如何在C++中使用localtime正确初始化时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64882593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com