如何比较日期和时间,以字符串格式给出?
Posted
技术标签:
【中文标题】如何比较日期和时间,以字符串格式给出?【英文标题】:How to compare date and time, given in string format? 【发布时间】:2021-05-02 06:18:27 【问题描述】:我想知道如何在 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
变量成员。
【问题讨论】:
请显示您尝试的代码的minimal reproducible example 以及您收到的确切错误消息 如果您想查看<ctime>
和 <chrono>
库,它们都不支持将自定义文本格式转换为时间/日期对象。您需要自己创建它们。 (我敢肯定,那里有很好的图书馆你可以寻找)
随着进一步挖掘,您似乎可以使用chrono::from_stream
或chrono::parse
为您的chrono::duration
类型和C++20 自定义解析器。但是,我手头没有它来测试它。
【参考方案1】:
这是我在搜索不同的参考资料后如何完成它。 首先,在使用大约 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://***.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;
;
【讨论】:
以上是关于如何比较日期和时间,以字符串格式给出?的主要内容,如果未能解决你的问题,请参考以下文章