【发布时间】:2016-12-17 12:54:42
【问题描述】:
我在我的项目中使用HowardHinnant date 库。我想得到 n 个月之前的确切日期时间。
例如:“2016-12-17 18:21:26”是当前日期时间,我想知道 13 个月前的日期时间。它应该输出“2015-11-17 18:21:26”。
/*
* This function will return the current date in year_month_day format
*/
auto currentDate() {
auto currentTime = std::chrono::system_clock::now();
date::year_month_day currentDate = date::floor<date::days>(currentTime);
return currentDate;
}
/*
* This function will find the date before (n) months
*/
template <typename T>
auto oldDate(T monthsNum) {
auto currentDate = currentDate();
auto yearCurrentDate = (int)currentDate.year();
auto monthCurrentDate = currentDate.month();
auto dayCurrentDate = currentDate.day();
auto yearNum = monthsNum/12;
auto yearEndDate = yearCurrentDate - yearNum;
auto monthNum = monthsNum%12;
auto monthEndDate = monthCurrentDate;
while(monthNum) {
monthEndDate--;
}
if(monthEndDate > monthCurrentDate) {
yearEndDate--;
}
date::year_month_day endDate = date::year{yearEndDate}/monthEndDate;
return endDate;
}
我的函数oldDate() 将返回几个月前n 的日期。但我无法获得时间。
【问题讨论】:
-
如果没有这样的日期怎么办?
2016-03-31 18:21:26的前一个月? -
@W.F. :在这种情况下,它应该返回该月和该年的最后日期。但是我的函数目前没有处理这种情况。