将日期和时间字符串解析为数字以比较 C++
Parsing date and time string into a number to compare C++
我的应用程序收到一个日期和时间字符串。我需要能够解析此字符串并将其与当前时间(以秒为单位)进行比较。
我将其解析为 struct tm t
以分别获取年、月、日、小时、分钟和秒。
std::string timestr = "2020-12-18T16:40:07";
struct tm t = {0};
sscanf(timestr.c_str(), "%04d-%02d-%02dT%02d:%02d:%02d",
&t.tm_year, &t.tm_mon, &t.tm_mday,
&t.tm_hour, &t.tm_min, &t.tm_sec);
我不确定是否需要将其转换为纪元时间,但当我这样做时,我得到 -1。我不知道为什么。
time_t t_of_day;
t_of_day = mktime(&t);
我真的需要先将其转换为纪元吗?
获取当前时间(以秒为单位)然后将其与我在 t
中获取的时间信息进行比较的最佳方法是什么?谢谢
只需使用 chrono
库的功能:
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&t));
auto epoch = std::chrono::duration_cast<std::chrono::seconds>(tp.time_since_epoch());
但您不需要将其转换为纪元。使用 std::chrono::time_point
比较,如:
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&t));
auto now = std::chrono::system_clock::now();
std::cout << (tp == now) << std::endl;
你想要 C++ 解析:
https://en.cppreference.com/w/cpp/io/manip/get_time
std::stringstream timestr = "2020-12-18T16:40:07";
struct tm t = {0};
timestr >> std::get_time(&t, "%Y-%m-%dT%H:%M:%S");
我应该注意到您的代码中有一个错误:tm_year
与我们所知的年份不同。这是自 1900 年以来的年数!
https://www.cplusplus.com/reference/ctime/tm/
因此您的代码需要另一行:
t.tm_year -= 1900;
注意:std::get_time()
已经进行了补偿。
这可能是 mktime()
在 3920 年超出范围时返回 -1 的原因。
我的应用程序收到一个日期和时间字符串。我需要能够解析此字符串并将其与当前时间(以秒为单位)进行比较。
我将其解析为 struct tm t
以分别获取年、月、日、小时、分钟和秒。
std::string timestr = "2020-12-18T16:40:07";
struct tm t = {0};
sscanf(timestr.c_str(), "%04d-%02d-%02dT%02d:%02d:%02d",
&t.tm_year, &t.tm_mon, &t.tm_mday,
&t.tm_hour, &t.tm_min, &t.tm_sec);
我不确定是否需要将其转换为纪元时间,但当我这样做时,我得到 -1。我不知道为什么。
time_t t_of_day;
t_of_day = mktime(&t);
我真的需要先将其转换为纪元吗?
获取当前时间(以秒为单位)然后将其与我在 t
中获取的时间信息进行比较的最佳方法是什么?谢谢
只需使用 chrono
库的功能:
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&t));
auto epoch = std::chrono::duration_cast<std::chrono::seconds>(tp.time_since_epoch());
但您不需要将其转换为纪元。使用 std::chrono::time_point
比较,如:
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&t));
auto now = std::chrono::system_clock::now();
std::cout << (tp == now) << std::endl;
你想要 C++ 解析:
https://en.cppreference.com/w/cpp/io/manip/get_time
std::stringstream timestr = "2020-12-18T16:40:07";
struct tm t = {0};
timestr >> std::get_time(&t, "%Y-%m-%dT%H:%M:%S");
我应该注意到您的代码中有一个错误:tm_year
与我们所知的年份不同。这是自 1900 年以来的年数!
https://www.cplusplus.com/reference/ctime/tm/
因此您的代码需要另一行:
t.tm_year -= 1900;
注意:std::get_time()
已经进行了补偿。
这可能是 mktime()
在 3920 年超出范围时返回 -1 的原因。