两个整数日期之间的月份

use*_*657 0 c# asp.net datetime int32

我有两个日期作为整数.如何在c#中找到这两个整数之间的月份差异?

例如:

Int32 beginDate= 20130307(yyyymmdd)
Int32 beginDate= 20140507(yyyymmdd)
Run Code Online (Sandbox Code Playgroud)

我需要14个月的结果.

我已经尝试过了:

DateTime beginDatepar = Convert.ToDateTime(beginDate);
DateTime endDatepar = Convert.ToDateTime(beginDate);
int monthDifference = ((beginDatepar.Year - endDatepar.Year) * 12) + 
                        beginDatepar.Month - endDatepar.Month;
Run Code Online (Sandbox Code Playgroud)

但是当我将Int32转换为Datetime时,错误是"从'Int32'到'DateTime'的无效转换"

Jon*_*eet 5

您可以使用我的Noda Time库.它是专门为使这样的事情更简单而创建的.

// TODO: Encapsulate this conversion in a separate method
LocalDate start = new LocalDate(beginDate / 10000,
                                (beginDate / 100) % 100,
                                beginDate % 100);
LocalDate end = new LocalDate(endDate / 10000,
                              (endDate / 100) % 100,
                              endDate % 100);

Period period = Period.Between(start, end, PeriodUnits.Months);
int months = period.Months;
Run Code Online (Sandbox Code Playgroud)

请注意,这将返回完整的月份-所以,如果你添加monthsstart,你会之前或等于得到一个数值end,但如果添加months + 1将严格之后end.

因此,例如,5月20日至7月10日也要算的一个月,而不是两个.

作为一个单独的问题,我强烈建议你首先停止将日期表示为这样的整数.追溯到代码首先执行此操作的位置,并修复它.