【发布时间】:2021-03-01 02:27:12
【问题描述】:
我得到了 Epoch 的开始,我应该得到当前时间:
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
日期.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。很明显,我希望当前时间,因为在 localtime(now) 中使用的 time(NULL) 应该包含从 Epoch 到的秒数。那么可能出了什么问题呢?
【问题讨论】:
-
打开编译器警告。此外,如果创建了多个实例,您的类将中断,因为
localtime本质上返回了一个指向全局的指针。 -
考虑
struct tm date_tm;(没有*)和*date_tm(localtime(&date)(添加*) -
C++ 有
chrono,这比time(NULL)好得多。 -
也许
date(time(NULL)), date_tm(localtime(&date))没有按顺序计算? -
编译器不需要按顺序评估默认 ctor 吗?