c#根据上个月

时间:2017-05-26 20:03:39

标签: c# date datetime

我正在尝试将日期添加到日期并根据上个月填充文本框。对于那些在31日(甚至2月28日)结束的月份,这是有效的。但是,如果前一个月在30日结束,而下个月在31日结束,则可能是一天短期或一天。例如:

上一个开课日期:4/1/2017
上一个结束日期:4/30/2017
新开始日期:2017年5月1日 新结束日期:应该 5/31/2017

这是我的代码:

// Set the Start Date
DateTime dtNewStartDate;
dtNewStartDate = Convert.ToDateTime(txtRecentBeginDate.Text).AddMonths(1);
txtNewStartDate.Text = dtNewStartDate.ToString();

// Set the End Date
DateTime dtNewEndDate;
dtNewEndDate = Convert.ToDateTime(txtNewStartDate.Text).AddMonths(1);
txtNewEndDate.Text = dtNewEndDate.ToString();

这产生的结束日期为6/1/2017而不是5/31/2017

编辑:我能够从https://social.msdn.microsoft.com/Forums/en-US/218260ec-b610-4fa6-9d1b-f56f3438b721/how-to-get-the-last-day-of-a-particular-month?forum=Vsexpressvcs找到我想要的内容。 此解决方案可以解决闰年问题,并在任何情况下获得正确的月份最后一天。这就是我想出的:

// Set the End Date
int intYear = dtNewStartDate.Year;
int intMonth = dtNewStartDate.Month;
int intNumberOfDays = DateTime.DaysInMonth(intYear, intMonth);
DateTime dtNewEndDate = new DateTime(intYear, intMonth, intNumberOfDays);
txtNewEndDate.Text = dtNewEndDate.ToString();

2 个答案:

答案 0 :(得分:2)

您可以获得该月的最后一天。

 DateTime today = DateTime.Today;
 DateTime endOfMonth = new DateTime(today.Year, 
                               today.Month, 
                               DateTime.DaysInMonth(today.Year, 
                                                    today.Month));

答案 1 :(得分:0)

这就是我通常做的事情:只需从开始日期开始计算年份和月份,根据该日期创建一个新日期,添加一个月并减去一天,最后是下个月的最后一天:: < / p>

DateTime dtNewEndDate = new DateTime(dtNewStartDate.Year, dtNewStartDate.Month, 1)
    .AddMonths(1)
    .AddDays(-1);