两个整数日期之间的月份
本文关键字:之间 日期 整数 两个 | 更新日期: 2023-09-27 18:17:45
我有 2 个日期作为整数。如何在 c# 中找到这两个整数之间的月差?
例如:
Int32 beginDate= 20130307(yyyymmdd)
Int32 beginDate= 20140507(yyyymmdd)
我需要结果为 14 个月。
我已经尝试过:
DateTime beginDatepar = Convert.ToDateTime(beginDate);
DateTime endDatepar = Convert.ToDateTime(beginDate);
int monthDifference = ((beginDatepar.Year - endDatepar.Year) * 12) +
beginDatepar.Month - endDatepar.Month;
但是当我将 Int32 转换为日期时间时,错误是"从'Int32'到'日期时间'的转换无效">
你可以使用我的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;
请注意,这将返回完整的月份 - 所以如果你months
加到start
,你会得到一个早于或等于end
的值,但如果你加months + 1
它将严格在end
之后。
例如,5 月 20 日至 7 月 10 日将算作一个月,而不是两个月。
作为一个单独的问题,我强烈建议您首先停止将日期表示为这样的整数。追溯到代码第一次执行此操作的位置,并对其进行修复。
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);
如果您不需要小数部分,请尝试如下操作:
int beginDate = 20130307;
int endDate = 20140507;
int diff = ((endDate - beginDate) / 100);
int diff_month = (diff / 100) * 12 + diff % 100;