C++ 比较 2 个日期并检查分钟差异
C++ Compare 2 dates and check the minutes difference
事情是这样的:
日期时间访问是使用 C# 使用 DateTime.Now
创建的。此日期时间通过 JSON 传递给 C++ 方法。我正在使用 JsonCpp 来处理 Json 数据,但我不确定当数据是日期时间时如何处理。
我想将我收到的这个日期时间与实际日期时间进行比较,并检查两者之间的分钟差异(如果差异在定义的时间间隔内)。
如果我使用 JsonCpp 将 Json 日期时间转换为字符串,我的格式为:
2015-06-08T11:17:23.746389-03:00
所以我想做的是这样的:
var d1 = oldAccess["Date"].ToString(); //Json datetime converted to a string
var d2 = actualAccess["Date"].ToString()
if((d2 - d1) < 20) { //Difference between the two dates needs to be less than 20 minutes
return true;
} else return false;
我是 C++ 的新手,即使在寻找我也没有发现如何做到这一点。
好的,我明白了。不是最好的方法,也不是漂亮的方法,但它有效,因为我知道这两个日期是在同一台服务器上设置的,并且总是以相同的格式出现 \"2015-01-01T23:40:00.000000-03:00\"
这是我所做的:
int convertToInt(std::string number_str){
int number;
std::istringstream ss(number_str);
ss.imbue(std::locale::classic());
ss >> number;
return number;
}
time_t convertDatetime(std::string date_str) {
time_t rawtime;
struct tm date;
int year, month, day, hour, min, sec;
date_str.erase(std::remove_if(date_str.begin(), date_str.end(), isspace), date_str.end());
year = convertToInt(date_str.substr(1, 4));
month = convertToInt(date_str.substr(6, 2));
day = convertToInt(date_str.substr(9, 2));
hour = convertToInt(date_str.substr(12, 2));
min = convertToInt(date_str.substr(15, 2));
sec = convertToInt(date_str.substr(18, 2));
time(&rawtime);
localtime_s(&date, &rawtime);
date.tm_year = year - 1900;
date.tm_mon = month - 1;
date.tm_mday = day;
date.tm_hour = hour;
date.tm_min = min;
date.tm_sec = sec;
return mktime(&date);
}
bool isValidIntervalDatetime(std::string actualDatetime_str, std::string oldDatetime_str, int maxMinutesInterval) {
double maxSecondsInterval = 60 * maxMinutesInterval;
time_t actualDatetime = convertDatetime(actualDatetime_str);
time_t oldDatetime = convertDatetime(oldDatetime_str);
double secondsDiff = difftime(actualDatetime, oldDatetime);
return secondsDiff <= maxSecondsInterval;
}
int main(int argc, char* argv[])
{
auto maxMinutesInterval = 20;
auto actuaDatetime = JsonConverter::toString(actualAccess["Date"]); // \"2015-01-02T00:00:00.000000-03:00\"
auto oldDatetime = JsonConverter::toString(oldAccess["Date"]); // \"2015-01-01T23:40:00.000000-03:00\"
if (isValidIntervalDatetime(actuaDatetime, oldDatetime, maxMinutesInterval){
//do something
}
}
事情是这样的:
日期时间访问是使用 C# 使用 DateTime.Now
创建的。此日期时间通过 JSON 传递给 C++ 方法。我正在使用 JsonCpp 来处理 Json 数据,但我不确定当数据是日期时间时如何处理。
我想将我收到的这个日期时间与实际日期时间进行比较,并检查两者之间的分钟差异(如果差异在定义的时间间隔内)。
如果我使用 JsonCpp 将 Json 日期时间转换为字符串,我的格式为:
2015-06-08T11:17:23.746389-03:00
所以我想做的是这样的:
var d1 = oldAccess["Date"].ToString(); //Json datetime converted to a string
var d2 = actualAccess["Date"].ToString()
if((d2 - d1) < 20) { //Difference between the two dates needs to be less than 20 minutes
return true;
} else return false;
我是 C++ 的新手,即使在寻找我也没有发现如何做到这一点。
好的,我明白了。不是最好的方法,也不是漂亮的方法,但它有效,因为我知道这两个日期是在同一台服务器上设置的,并且总是以相同的格式出现 \"2015-01-01T23:40:00.000000-03:00\"
这是我所做的:
int convertToInt(std::string number_str){
int number;
std::istringstream ss(number_str);
ss.imbue(std::locale::classic());
ss >> number;
return number;
}
time_t convertDatetime(std::string date_str) {
time_t rawtime;
struct tm date;
int year, month, day, hour, min, sec;
date_str.erase(std::remove_if(date_str.begin(), date_str.end(), isspace), date_str.end());
year = convertToInt(date_str.substr(1, 4));
month = convertToInt(date_str.substr(6, 2));
day = convertToInt(date_str.substr(9, 2));
hour = convertToInt(date_str.substr(12, 2));
min = convertToInt(date_str.substr(15, 2));
sec = convertToInt(date_str.substr(18, 2));
time(&rawtime);
localtime_s(&date, &rawtime);
date.tm_year = year - 1900;
date.tm_mon = month - 1;
date.tm_mday = day;
date.tm_hour = hour;
date.tm_min = min;
date.tm_sec = sec;
return mktime(&date);
}
bool isValidIntervalDatetime(std::string actualDatetime_str, std::string oldDatetime_str, int maxMinutesInterval) {
double maxSecondsInterval = 60 * maxMinutesInterval;
time_t actualDatetime = convertDatetime(actualDatetime_str);
time_t oldDatetime = convertDatetime(oldDatetime_str);
double secondsDiff = difftime(actualDatetime, oldDatetime);
return secondsDiff <= maxSecondsInterval;
}
int main(int argc, char* argv[])
{
auto maxMinutesInterval = 20;
auto actuaDatetime = JsonConverter::toString(actualAccess["Date"]); // \"2015-01-02T00:00:00.000000-03:00\"
auto oldDatetime = JsonConverter::toString(oldAccess["Date"]); // \"2015-01-01T23:40:00.000000-03:00\"
if (isValidIntervalDatetime(actuaDatetime, oldDatetime, maxMinutesInterval){
//do something
}
}