如何比较以字符串格式给出的日期和时间?

问题描述

我想知道如何在 C++ 中以字符串格式比较日期和时间? 换句话说,我的问题是如何使用库为以下类实现比较函数

class DateTime {
  private: 
   string date =;
   string time ;
  public :
     DateTime (string d,string t) :date (d),time(t) {
     }
     DateTime diff (DateTime t1,DateTime t2) {
     //?
     }
};

让我们假设我这样称呼它

DateTime from ("2020-11-09","06:22:30");
DateTime to ("2021-04-03","23:54:13");
Date diff = to.diff (from,to);

这只是一个例子,任何比较日期和时间的建议都值得赞赏。我的限制是日期和时间以字符串格式给出,如果我能以秒或上面显示的类似字符串格式返回它们的差异,那就太好了。

我已经在 VScode 中尝试了这个 struct,但我收到编译错误,它无法识别 time_t 变量成员。

解决方法

这是我在搜索不同的参考资料后最终确定它的方法。 首先,我在使用大约 8000 个输入进行测试时得到了一些随机错误结果,但我意识到我在代码中注释的一个字段应该在调用 mktime() 函数之前更新。

class Time {
   private:
      time_t _timeType;
      struct tm buf;
      struct tm * _timeinfo  = &buf;
      string _timeStr;
      string _dateStr;

 public:
      Time (string time,string date) : _timeStr(time),_dateStr(date) { // YYYY-MM-DD,HH:MM:SS
           int hr =  stoi(time.substr(0,2));
           int min = stoi(time.substr(3,2));
           int sec = stoi(time.substr(6,2));

           int yr = stoi(date.substr(0,4));
           int mon = stoi(date.substr(5,2));
           int day = stoi(date.substr(8,2));  

            _timeinfo->tm_hour = hr;
            _timeinfo->tm_min = min;
            _timeinfo->tm_sec = sec;
            _timeinfo->tm_mday = day;
            _timeinfo->tm_mon = mon-1; // because it is in range of [0:11]
            _timeinfo->tm_year = yr;
           /*I updated this field to prevent strange reports based folloing this recommendation
           https://stackoverflow.com/questions/26788470/difftime-returns-strange-value-on-particular-date
           */ 
            _timeinfo->tm_isdst = -1;
            _timeType = mktime(_timeinfo);   
      }

      void compareTime (Time* t) {  
         cout<<_timeStr<<" "<< _dateStr<<" "<<t->_timeStr <<" "<<t->_dateStr<<" "<<difftime(_timeType,t->_timeType)<<endl;
      }
};