我有一個日期值varFinishDate,我從一個SQL數據庫中拉出來,我想在varFinishDate之後的月份中獲得30日。除非在二月份,我希望它成爲第28名。在C#中執行此操作的最佳方法是什麼?如何獲得給定日期後一個月的30日
把它放在上下文中,我們有程序運行,並在報告完成後的月底(30日即使有31天)到期。因此,如果在四月的任何時候完成,報告將在五月三十日到期,除非在一月份完成,否則報告將於二月二十八日到期。
我有一個日期值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