问题描述
此示例是一种使用 date 来计算一个月的最后一天的方法.图书馆.为此目标有更简单的解决方案吗?
This example is a way to calculate the last day of a month using date library.Is there a simpler solution to this goal?
这个想法行不通:lastDay = firstDay + months {1}-days {1};
this idea not work:lastDay = firstDay + months{1} - days{1};
#include <date/date.h>
#include <iostream>
using namespace std;
using namespace date;
int main() {
sys_days firstDay, lastDay;
string d1;
d1 = "2018-12-01";
istringstream in1{d1};
in1 >> parse ("%F", firstDay);
sys_days d2 = firstDay;
auto ymd = year_month_day{d2};
unsigned j = unsigned (ymd.month());
unsigned i = j;
if (i == 12)
i = 0;
while (true) {
d2 = d2 + days{1};
ymd = year_month_day{d2};
j = unsigned (ymd.month());
if (j == i + 1)
break;
}
lastDay = d2 - days{1};
cout << lastDay << '\n'; // 2018-12-31
return 0;
}
推荐答案
这是一种更简单的方法:
Here's an easier way:
#include "date/date.h"
#include <iostream>
date::year_month_day
lastDay(date::year_month_day ymd)
{
return ymd.year()/ymd.month()/date::last;
}
int
main()
{
using namespace date;
std::cout << lastDay(2018_y/12/01) << '\n'; // 2018-12-31
}
last
可以在任何年/月/日
表达式中用作日指定符",以表示"年/月的最后一天对,这将创建一个类型为
year_month_day_last
的类型,该类型可以隐式转换为 year_month_day .它还具有一个
day()
getter:
last
can be used as the "day specifier" in any year/month/day
expression to mean "last day of the year/month
pair. This will create a type year_month_day_last
which is implicitly convertible to year_month_day
. It also has a day()
getter:
https://howardhinnant.github.io/date/date.html#year_month_day_last
这篇关于一个月的最后一天?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!