如何获得给定日期后一个月的30日
问题描述:
我有一个日期值varFinishDate,我从一个SQL数据库中拉出来,我想在varFinishDate之后的月份中获得30日。除非在二月份,我希望它成为第28名。在C#中执行此操作的最佳方法是什么?如何获得给定日期后一个月的30日
把它放在上下文中,我们有程序运行,并在报告完成后的月底(30日即使有31天)到期。因此,如果在四月的任何时候完成,报告将在五月三十日到期,除非在一月份完成,否则报告将于二月二十八日到期。
答
这个怎么样?
var nextMonth = varFinishDate.AddMonths(1);
var targetDate = new DateTime(
nextMonth.Year,
nextMonth.Month,
nextMonth.Month == 2 ? 28 : 30);
答
int day = 30;
if (finishedDate.Month == 1)
day = 28;
DateTime nextMonth = finishedDate.AddMonths(1);
DateTime reportDate = new DateTime(nextMonth.Year, nextMonth.Month, day);
答
使用DaysInMonth();
所以,你会碰到这样的
var nextMonth = varFinishDate.AddMonths(1);
if(nextMonth.DaysInMonth() < 30)
nextMonth = new DateTime(nextMonth.Year, nextMonth.Month, 28);
else
nextMonth = new DateTime(nextMonth.Year, nextMonth.Month, 30);
答
这应该允许闰年也使用29个日:
var dueDate = varFinishDate.AddMonths(1);
if (DateTime.DaysInMonth(dueDate.Year, dueDate.Month) < 30) {
dueDate.AddDays(DateTime.DaysInMonth(dueDate.Year, dueDate.Month) - dueDate.Day);
} else {
dueDate = new DateTime(dueDate.Year,dueDate.Month,30);
}
作为一种好奇心,如果它是二月,为什么不是你想要的最后一天(即28或29)? – Thomas 2011-04-28 02:21:49
我认为管理层会发现忽略闰年对于恒常来说更容易。“如果是2月份,所有报告都将在30日或28日发布。他们选择了第30个而不是每个月的最后一天。 – Hybrid 2011-04-28 02:41:43