Months between two integer dates
本问题已经有最佳答案,请猛点这里访问。
我有两个日期作为整数。我怎样才能在c中找到这两个整数之间的月份差?
例如:
1 2 | Int32 beginDate= 20130307(yyyymmdd) Int32 beginDate= 20140507(yyyymmdd) |
我需要14个月的结果。
我已经试过了:
1 2 3 4 | DateTime beginDatepar = Convert.ToDateTime(beginDate); DateTime endDatepar = Convert.ToDateTime(beginDate); int monthDifference = ((beginDatepar.Year - endDatepar.Year) * 12) + beginDatepar.Month - endDatepar.Month; |
但当我将int32转换为datetime时,错误是"从"int32"到"datetime"的转换无效"。
你可以用我的Noda时间库。它是专门为使这样的事情更简单而创建的。
1 2 3 4 5 6 7 8 9 10 | // 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; |
请注意,这将返回完整的月份-因此,如果将
例如,5月20日到7月10日是一个月,而不是两个月。
作为一个单独的问题,我强烈建议您首先停止将日期表示为这样的整数。追溯到代码第一次这样做的地方,并修复它。
如果不需要小数部分,请尝试如下操作:
1 2 3 4 5 6 | int beginDate = 20130307; int endDate = 20140507; int diff = ((endDate - beginDate) / 100); int diff_month = (diff / 100) * 12 + diff % 100; |
1 2 3 4 5 6 7 8 9 | Int32 beginDate = 20130307; Int32 endDate = 20140507; Int32 year1 = beginDate / 10000; Int32 year2 = endDate / 10000; Int32 month1 = (beginDate % 10000) / 100; Int32 month2 = (endDate % 10000) / 100; Int32 MonthDiff = (12 * year1 + month1) - (12 * year2 + month2); |