Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 如何计算C中两个日期之间的月数#_C# 4.0 - Fatal编程技术网

C# 4.0 如何计算C中两个日期之间的月数#

C# 4.0 如何计算C中两个日期之间的月数#,c#-4.0,C# 4.0,我正在这样做 datediff = (date1 - DateOfDeposit).TotalDays; 但这给出了天数,我想要的是月数。最简单的选择可能是使用我的库,它正是为这类事情而设计的(并且使它更干净地处理一般的日期和时间): NET中没有任何东西可以让这变得特别容易。你可以根据Ani的回答减去年和月,但也要考虑月的哪一天,以避免我在评论中描述的问题。不过,我建议先编写一套好的单元测试——要记住闰年之类的东西。假设你想要整月的数量,我认为这应该行得通(不确定这不能处理什么特殊情况,但我

我正在这样做

datediff = (date1 - DateOfDeposit).TotalDays;

但这给出了天数,我想要的是月数。

最简单的选择可能是使用我的库,它正是为这类事情而设计的(并且使它更干净地处理一般的日期和时间):


NET中没有任何东西可以让这变得特别容易。你可以根据Ani的回答减去年和月,但也要考虑月的哪一天,以避免我在评论中描述的问题。不过,我建议先编写一套好的单元测试——要记住闰年之类的东西。

假设你想要整月的数量,我认为这应该行得通(不确定这不能处理什么特殊情况,但我想不出有什么意外):

您可以添加任何带有DateTime.Day的小数部分,但不清楚该如何精确定义(1月29日到2月27日之间有多少个月?)


如果你正在做大量的日期时间处理,Jon Skeet的Noda时间库(他在回答中提到)是一个不错的选择。

如果dateOfDeposit晚于date1,结果将是否定的。应为int m=12*(DateOfDeposit.Year-date1.Year)+(DateOfDeposit.Month-date1.Month);也就是说,6月30日至7月1日与6月1日至7月31日的月数相同。第一个是0个月零1天,而第二个是1个月零30天。我不太清楚你说的“整整一个月”是什么意思,但我想说的是六月一日到七月三十一日之间有整整一个月,但六月三十日到七月一日之间没有整整一个月……是的,乔恩。我真的想治疗(7月的任何一天-6月的任何一天)=1个月。OP的要求并不明确,但至少定义起来是准确的。否则,我们根本不清楚如何对待2月28日至1月29日。是0个月零30天吗?或者是1个月2天(假设不是闰年,1月2天+整个2月)。还是(2/31+28/28)个月?没有精确的要求,不容易定义<代码>期间。介于(开始、结束、期间单位。月份)看起来不错,撇开复杂的定义不谈。可能重复
LocalDate start = new LocalDate(2013, 1, 5);
LocalDate end = new LocalDate(2014, 6, 1);
Period period = Period.Between(start, end, PeriodUnits.Months);
Console.WriteLine(period.Months); // 16
12 * (date1.Year - DateOfDeposit.Year) + (date1.Month - DateOfDeposit.Month)