我有一个日期值varFinishDate,我从一个SQL数据库中提取,我希望在varFinishDate之后获得该月的第30个。除非它是在二月份,我希望它是第28位。在C#中执行此操作的最佳方法是什么?
为了把它放在上下文中,我们有程序在运行,报告将在月底结束后报告(即使有31天,也会在30日)。因此,如果它在4月份的任何时间结束,报告将于5月30日到期,依此类推,除非他们在1月份结束,报告将于2月28日到期。
答案 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);
}