我在比较计时库的日期时遇到了问题。例如,当date_to_do_something与当前日期匹配时,应该会发生一些事情。
#include <iostream>
#include <chrono>
#include <typeinfo>
using namespace std;
int main(){
end = chrono::system_clock::now();
string date_to_do_something ="Tue Jul 27 17:13:17 2021";
time_t end_time = chrono::system_clock::to_time_t(end);
//gives some weird types:pc, pl
cout<<typeid(ctime(&end_time)).name()<<endl;
cout<<typeid(&end_time).name()<<endl;
//Now how to compare?
}发布于 2021-07-20 02:00:59
首先,pc和pl类型是char*和long*类型。如果您希望使用typeid打印完整的类型名称,则通过管道将输出输出到c++filt,类似于./prog | c++filt --types。要比较这两个日期,您应该将std::string转换为time_t。为此,请使用tm structure。要将字符串转换为时间,请使用time.h报头中的strptime()函数。之后,使用from_time_t()和mktime()创建time_point值。最后用to_time_t()函数将time_point_t类型转换为time_t类型。
你的代码应该是这样的:
auto end = chrono::system_clock::now();
string date_to_do_something = "Mon Jul 27 17:13:17 2021";
time_t end_time = chrono::system_clock::to_time_t(end);
// gives some weird types:pc, pl
cout << typeid(ctime(&end_time)).name() << endl;
cout << typeid(&end_time).name() << endl;
// Now how to compare?
tm t = tm{};
strptime(date_to_do_something.c_str(), "%a %b %d %H:%M:%S %Y", &t);
chrono::system_clock::time_point tp =
chrono::system_clock::from_time_t(mktime(&t));
time_t time = chrono::system_clock::to_time_t(tp);
if (time == end_time) {
// do something
} else {
// do something else
}https://stackoverflow.com/questions/68444619
复制相似问题