如何获得给定日期后一个月的30日

问题描述:

我有一个日期值varFinishDate,我从一个SQL数据库中拉出来,我想在varFinishDate之后的月份中获得30日。除非在二月份,我希望它成为第28名。在C#中执行此操作的最佳方法是什么?如何获得给定日期后一个月的30日

把它放在上下文中,我们有程序运行,并在报告完成后的月底(30日即使有31天)到期。因此,如果在四月的任何时候完成,报告将在五月三十日到期,除非在一月份完成,否则报告将于二月二十八日到期。

+0

作为一种好奇心,如果它是二月,为什么不是你想要的最后一天(即28或29)? – Thomas 2011-04-28 02:21:49

+0

我认为管理层会发现忽略闰年对于恒常来说更容易。“如果是2月份,所有报告都将在30日或28日发布。他们选择了第30个而不是每个月的最后一天。 – Hybrid 2011-04-28 02:41:43

这个怎么样?

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); 
}