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

时间:2011-04-28 01:54:00

标签: c# datetime

我有一个日期值varFinishDate,我从一个SQL数据库中提取,我希望在varFinishDate之后获得该月的第30个。除非它是在二月份,我希望它是第28位。在C#中执行此操作的最佳方法是什么?

为了把它放在上下文中,我们有程序在运行,报告将在月底结束后报告(即使有31天,也会在30日)。因此,如果它在4月份的任何时间结束,报告将于5月30日到期,依此类推,除非他们在1月份结束,报告将于2月28日到期。

4 个答案:

答案 0 :(得分:3)

这个怎么样?

var nextMonth = varFinishDate.AddMonths(1);
var targetDate = new DateTime(
    nextMonth.Year,
    nextMonth.Month,
    nextMonth.Month == 2 ? 28 : 30);

答案 1 :(得分:1)

使用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);

答案 2 :(得分:0)

int day = 30;
if (finishedDate.Month == 1)
    day = 28;

DateTime nextMonth = finishedDate.AddMonths(1);

DateTime reportDate = new DateTime(nextMonth.Year, nextMonth.Month, day); 

答案 3 :(得分:0)

这应该允许闰年也使用第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);
}