作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在进入纪元的开始,应该在这里获得当前时间:
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_tm
在date
之前构造/初始化,而不管它们在初始化列表中的顺序如何。
更改您的类定义以查看您期望的结果:
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/
我是一名优秀的程序员,十分优秀!