如果当月是12月,如何找到下个月的第一天

and*_*mon 20 c# datetime

我正在使用以下查询来获取下个月.

int theMonth = ((System.DateTime)periodStartDate).Month+1;
Run Code Online (Sandbox Code Playgroud)

但是如果periodstartDate month id = s 12月,则上述语句会抛出错误.

V4V*_*tta 41

我想你可以用这种方式得到它

DateTime dt = new DateTime(2011,12,2);
DateTime dayone = new DateTime(dt.AddMonths(1).Year, dt.AddMonths(1).Month, 1);
Run Code Online (Sandbox Code Playgroud)

现在你有一个适当的DateTime对象到下个月的第一个,随便用它做


Eni*_*ity 18

((System.DateTime)periodStartDate).Month+1如果月份是12月,表达式不会抛出错误 - 它只返回13.我怀疑你这样做:

var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month + 1, 1);
Run Code Online (Sandbox Code Playgroud)

这会引发错误.

试试这个:

var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month, 1)
    .AddMonths(1);
Run Code Online (Sandbox Code Playgroud)


sym*_*reg 11

我喜欢V4V的答案,但我这样写:

DateTime dt = new DateTime(2011,12,2);
DateTime firstDayNextMonth = dt.AddMonths(1).AddDays(-dt.Day+1);
Run Code Online (Sandbox Code Playgroud)

例如,我可能正在计算未来的时间,并且此代码在不剥离时间部分的情况下执行此操作.

每个hvd最精明的评论,这段代码应该是:

DateTime dt = new DateTime(2011,12,2);
DateTime firstDayNextMonth = dt.AddDays(-dt.Day+1).AddMonths(1);
Run Code Online (Sandbox Code Playgroud)

  • 你假设`dt.AddMonths(1).Day`与`dt.Day`相同.考虑一下你在1月31日开始时会发生什么. (3认同)

And*_*ndy 7

int theMonth = ((System.DateTime)periodStartDate).AddMonths(1).Month;
Run Code Online (Sandbox Code Playgroud)


Rub*_*ias 7

技巧部分是要了解开始日期不能从当月的第一天开始,因此简单的AddMonth可能会导致不希望的日期。在 01 天构建一个新的日期时间,然后添加月份。

var firstDayNextMonth = new DateTime(startDate.Year, startDate.Month, 1).AddMonths(+1);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,AddMonths方法文档指出:

AddMonths 方法计算结果月份和年份,同时考虑闰年和一个月中的天数,然后调整结果 DateTime 对象的日期部分。如果结果日不是结果月中的有效日,则使用结果月的最后一个有效日。例如,对于非闰年,3 月 31 日 + 1 个月 = 4 月 30 日,3 月 31 日 - 1 个月 = 2 月 28 日,对于闰年,3 月 31 日 - 1 个月 = 2 月 29 日。


Zru*_*uty 1

计算后theMonth,检查它是否等于 13(12 月后的月份)并将该值替换为 1:

theMonth = theMonth==13 ? 1 : theMonth;
Run Code Online (Sandbox Code Playgroud)