2011-04-28 152 views
0

我有一個日期值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

回答

3

這個怎麼樣?

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

DateTime nextMonth = finishedDate.AddMonths(1); 

DateTime reportDate = new DateTime(nextMonth.Year, nextMonth.Month, day); 
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); 
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); 
} 
相關問題