以月计算日期差异

时间:2013-05-08 01:37:53

标签: c# .net

我有一个字段返回年份和月份值。例如,20119年(2011年为9年,9月为9月)。我怎样才能将它与当前年份和月份进行比较以获得数月的差异?例如,以相同的格式,当前年份和月份将是20135年,因此我要寻找的值将是20. 20135减去20个月将是20119年。不确定如何构建公式以动态计算月份差异也许使用日期函数。

6 个答案:

答案 0 :(得分:5)

试试这个

DateTime x1 = DateTime.ParseExact("20119", "yyyyM", CultureInfo.InvariantCulture);
DateTime x2 = DateTime.ParseExact("20135", "yyyyM", CultureInfo.InvariantCulture);

int months =  Math.Abs((x2.Month - x1.Month) + 12 * (x2.Year - x1.Year));

答案 1 :(得分:1)

为什么不将年份乘以每个日期字段的一年中的月数,然后返回差异?

答案 2 :(得分:1)

首先,我通过你的问题假设:

  • 单个日期月份将有一位数
  • Year + Month的值是一个字符串(如果是int,则在下面的代码中的in值中抛出ToString())

因此,您的值将为5-6位数。您可以用更少的行来执行下面的代码,但请原谅我的详细答案 - 我将添加额外的代码以使其更清晰:

我们可以通过使用Date.Now

将当前日期仅作为月份
// Just want the month/year
DateTime currentDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);

现在我们可以使用子字符串方法获取您当前年/月的测试日期(记住我假设我们正在处理字符串值,如果没有则转换ToString())。

    // breaking out test date to year/month portions and saving as a new date time
    string testDateValue = "20119";
    int testDateYear = Convert.ToInt32(testDateValue.Substring(0, 4));
    int testDateMonth = Convert.ToInt32(testDateValue.Substring(4));
    DateTime testDate = new DateTime(testDateYear, testDateMonth, 1);

现在让我们与众不同:

// get month dif - remove abs() if want negative if test date in future
int numberOfMonths = Math.Abs(((currentDate.Year - testDate.Year) * 12) + 
  (currentDate.Month - testDate.Month));

现在 - 如果您想比较yyyym格式的2天而不是使用当前日期,只需执行上面列出的年/月转换,然后对其执行月份dif公式。

答案 3 :(得分:1)

您可以使用Time Period Library for .NET中的 DateDiff 类来计算月份:

// ----------------------------------------------------------------------
public void CalcMonths( DateTime epoch )
{
  DateDiff dateDiff = new DateDiff( DateTime.Now, epoch );
  Console.WriteLine( "{0} months", dateDiff.Months );
  // > 1 Year 4 Months 12 Days 12 Hours ago
} // CalcMonths

答案 4 :(得分:0)

这是MSDN(link)上发布的解决方案的代码段:

DateTime oldDate = new DateTime(2002,7,15);
DateTime newDate = DateTime.Now;

// Difference in days, hours, and minutes.
TimeSpan ts = newDate - oldDate;
// Difference in days.
int differenceInDays = ts.Days;

也应该工作数年/月(如下所示):

int differenceInMonths = (ts.Years *12 + ts.Months);

希望这会有所帮助。 Rgds,AB

答案 5 :(得分:0)

你基本上可以分割字符串。

int a = 201410;
int b= 20139;

int year1 = int.Parse(a.ToString().Substring(0,4));
int year2 = int.Parse(b.ToString().Substring(0,4));

int month1 = int.Parse(a.ToString().Substring(4));
int month2 = int.Parse(b.ToString().Substring(4));

//now construct a date for each
DateTime date1 = new DateTime(year1, month1, 1);
DateTime date2 = new DateTime(year2, month2, 1);

//then subtract them and make it months
int numberOfMonths = ((date1.Year - date2.Year) * 12) + date1.Month - date2.Month;