如何解决计时,C++,比较日期
我在比较 chrono 库中的日期时遇到问题。 例如,当 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?
}
解决方法
首先,pc
和 pl
类型是 char*
和 long*
类型。如果您想使用 typeid
将您的输出通过管道输出到 c++filt
来打印完整的类型名称,例如 ./prog | c++filt --types
。
要比较这两个日期,您应该将 std::string
转换为 time_t
。为此,请使用 tm structure
。要将字符串转换为时间,请使用 strptime()
标头中的 time.h
函数。之后使用 time_point
和 from_time_t()
创建 mktime()
值。最后使用 time_point_t
函数将 time_t
类型转换为 to_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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。