📅  最后修改于: 2023-12-03 15:06:54.326000             🧑  作者: Mango
StringStream
查找两个日期之间的天数有时候我们需要计算两个日期之间的天数。本文将介绍如何使用 StringStream
来实现这个功能。
我们假设两个日期都是以 YYYY/MM/DD
的格式字符串表示的,如 2019/12/01
。要求两个日期都有效,即不会出现如 2019/13/01
的错误格式。如果是不确定的日期格式,需要先进行日期格式化的操作。
我们可以将字符串日期使用 StringStream
转换为整型的年、月、日,在利用公式计算日期之差。具体步骤如下:
StringStream
对象中,使用 getline
方法按照 /
分隔日期。StringStream
中的字符串日期转换为整型数字。可以使用 std::stoi
方法将字符串转换为整型数字,也可以使用 stringstream
的 >>
运算符实现。#include <sstream>
#include <string>
#include <iostream>
#include <cmath>
using namespace std;
int dateToInt(string date) {
stringstream ss(date);
string token;
int year, month, day;
getline(ss, token, '/');
year = stoi(token);
getline(ss, token, '/');
month = stoi(token);
getline(ss, token, '/');
day = stoi(token);
return (year*365) + (month*30) + day;
}
int daysBetweenDates(string date1, string date2) {
return abs(dateToInt(date1) - dateToInt(date2));
}
int main() {
string date1 = "2019/12/01";
string date2 = "2020/01/01";
int days = daysBetweenDates(date1, date2);
cout << "Days between " << date1 << " and " << date2 << ": " << days << endl;
return 0;
}
在调用 daysBetweenDates
函数时,我们先将字符串日期转换为整型数字,然后计算日期之差(使用 abs
函数取绝对值)。
输出:
Days between 2019/12/01 and 2020/01/01: 31
如果要计算更多日期之差,只需要按照这个思路进行扩展即可。