首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chrono、c++、比较日期

Chrono、c++、比较日期
EN

Stack Overflow用户
提问于 2021-07-20 01:23:04
回答 1查看 63关注 0票数 2

我在比较计时库的日期时遇到了问题。例如,当date_to_do_something与当前日期匹配时,应该会发生一些事情。

代码语言:javascript
复制
#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?
 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-20 02:00:59

首先,pcpl类型是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类型。

你的代码应该是这样的:

代码语言:javascript
复制
  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
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68444619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档