我正在使用以下查询获取下个月。如何查找下个月的第一天,如果当前月份是十二月
int theMonth = ((System.DateTime)periodStartDate).Month+1;
但是如果periodstartDate month id = s December,上面的语句会抛出错误。
有没有人知道解决方案?
我正在使用以下查询获取下个月。如何查找下个月的第一天,如果当前月份是十二月
int theMonth = ((System.DateTime)periodStartDate).Month+1;
但是如果periodstartDate month id = s December,上面的语句会抛出错误。
有没有人知道解决方案?
你计算theMonth
后,检查它是否等于13(个月12月以后),并替换值1:
theMonth = theMonth==13 ? 1 : theMonth;
int theMonth = ((System.DateTime)periodStartDate).AddMonths(1).Month;
如果你想获得下一个月,这是正确的答案。也许这就是他要找的。 –
如果你打电话AddMonths(1)
那么.NET将自动滚动日期进入下一年。
periodStartDate.AddMonths(1).Month;
表达((System.DateTime)periodStartDate).Month+1
如果月份是十二月不会引发错误 - 它只是返回13.我怀疑你这样做:
var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month + 1, 1);
这将抛出一个错误。
试试这个:
var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month, 1)
.AddMonths(1);
我认为你可以以这种方式
DateTime dt = new DateTime(2011,12,2);
DateTime dayone = new DateTime(dt.AddMonths(1).Year, dt.AddMonths(1).Month, 1);
得到它现在你有一个正确的DateTime
对象的第一到下个月,请你做与它
DateTime now = DateTime.Now;
DateTime nextMonth;
if(now.Day > 1)
nextMonth = now.AddDays(-(now.Day - 1)).AddMonths(1);
else
nextMonth = now.AddMonths(1);
哪里现在是你要开始的日期,你可以用TheStartPeriod
我喜欢V4V的答案,但我把它写这种方式:
DateTime dt = new DateTime(2011,12,2);
DateTime firstDayNextMonth = dt.AddMonths(1).AddDays(-dt.Day+1);
例如,我可能会计算未来的时间,这段代码,如果没有剥离出一部分时间。
每HVD的最精明的评论,这个代码应该是:
DateTime dt = new DateTime(2011,12,2);
DateTime firstDayNextMonth = dt.AddDays(-dt.Day+1).AddMonths(1);
你假设'dt.AddMonths(1).Day'与'dt.Day'相同。考虑一下你在什么时候会发生什么,例如1月31日。 – hvd
伟大的观察。我已经修改了答案。 –
@hvd - 第一个例子正是我写的。花了我一点时间来弄清楚发生了什么事。在我的情况下,什么发生了内存异常,因为在无限循环中呈现1月的日历 - .- –
DateTime date = DateTime.Now;
Console.WriteLine(date);
// Sunday 28.06.2015 г. 10:22:41 ч.
int monthsBack = -1;
int whichDay = 1;
// It means -> what day the first day of the previous month is.
DayOfWeek FirstDayOfWeek = date.AddMonths(monthsBack).AddDays(whichDay).DayOfWeek;
Console.WriteLine(FirstDayOfWeek);
// Friday
int delta = DayOfWeek.Monday - date.AddMonths(monthsBack).AddDays(whichDay).DayOfWeek;
Console.WriteLine(delta);
// -4
//-4 ->Monday , -3 ->Tuesday, -2 ->Wednesday , -1 ->Thursday, 0 ->Friday
你应该解释你的代码。 –
确确实实这行抛出一个错误? – Fender
什么是例外? –
堆栈跟踪请? – Coops