C++ C++;比较两个日期并检查分钟差异

C++ C++;比较两个日期并检查分钟差异,c++,json,datetime,jsoncpp,C++,Json,Datetime,Jsoncpp,事情是这样的: datetime访问是用C#创建的,使用datetime.Now。此日期时间通过JSON传递到C++方法。我使用JsonCpp来处理Json数据,但我不确定当数据是datetime时如何处理 我想将我收到的这个日期时间与实际的日期时间进行比较,并检查两者之间的分钟差(如果差在定义的时间间隔上) 如果我使用JsonCpp将Json datetime转换为字符串,我将使用以下格式: 2015-06-08T11:17:23.746389-03:00 所以我想做的是这样的: var d

事情是这样的:

datetime访问是用C#创建的,使用
datetime.Now
。此日期时间通过JSON传递到C++方法。我使用JsonCpp来处理Json数据,但我不确定当数据是datetime时如何处理

我想将我收到的这个日期时间与实际的日期时间进行比较,并检查两者之间的分钟差(如果差在定义的时间间隔上)

如果我使用JsonCpp将Json datetime转换为字符串,我将使用以下格式:

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;
var d1=oldAccess[“Date”].ToString()//Json datetime转换为字符串
var d2=实际访问[“日期”]。ToString()
如果((d2-d1)<20){//两个日期之间的差值需要小于20分钟
返回true;
}否则返回false;

我是C++新手,甚至找不到该怎么做。< / P> <好吧,我明白了。这不是最好的方法,也不是漂亮的方法,但它很有效,因为我知道这两个日期设置在同一台服务器上,并且总是以相同的格式出现
\“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
    }
}
int-convertToInt(标准::字符串编号\u-str){
整数;
std::istringstream ss(编号);
imbue(std::locale::classic());
ss>>编号;
返回号码;
}
时间转换日期时间(标准::字符串日期){
时间与时间;
struct-tm日期;
整数年、月、日、时、分、秒;
日期字符串擦除(标准::删除字符串if(日期字符串开始(),日期字符串结束(),isspace),日期字符串结束());
年份=转换日期(日期(1,4));
月份=转换日期(日期(6,2));
日期=转换日期(日期(9,2));
小时=转换时间(日期(12,2));
最小值=转换(日期(15,2));
第二节=转换(日期为第18、2节);
时间(&rawtime);
本地时间(日期和原始时间);
date.tm_year=年份-1900;
date.tm_mon=第1个月;
date.tm_mday=天;
date.tm_hour=小时;
date.tm_min=min;
date.tm_sec=秒;
返回时间和日期;
}
bool isValidIntervalDatetime(std::string actualDatetime_str,std::string oldDatetime_str,int maxMinutesInterval){
双maxSecondsInterval=60*maxMinutesInterval;
time\u t actualDatetime=转换日期时间(actualDatetime\u str);
time\u t oldDatetime=convertDatetime(oldDatetime\u str);
double secondsDiff=difftime(actualDatetime,oldDatetime);

返回第二个DIFF,问题不是很清楚,你是否需要在C++中把一个字符串转换成一个DATEIME对象?马珂,DATEATE是用C格式创建的,通过JSON以这种格式传递:<代码> 2015-0608T11:17:23.7633-9303/<代码>,比我需要在C++中转换和比较的,我认为你应该考虑使用像BooSt.DATEJOTE这样的东西来解析。表示时间戳的字符串,然后执行所需的比较。您使用的是纯C++(GCC)还是具有像Boost或Qt之类的库,哪些编译器?没有库,我现在正在寻找BooStuz如何建议。我正在用VisualStudio编译。