0

我有一个返回年份和月份值的字段。例如,20119(2011 是年份,9 是 9 月)。我如何将其与当前年份和月份进行比较以获得月份的差异?例如,在相同的格式中,当前年份和月份将为 20135,因此我要查找的值将是 20。20135 减去 20 个月将是 20119。不知道如何构造公式来动态计算月差也许使用日期函数。

4

6 回答 6

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));
于 2013-05-08T01:47:43.467 回答
1

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

于 2013-05-08T01:44:50.460 回答
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 天而不是使用当前日期,只需执行上面列出的年/月转换,然后对其执行月份差异公式。

于 2013-05-08T01:55:46.393 回答
1

您可以使用.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
于 2013-05-08T06:15:22.220 回答
0

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

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

于 2013-05-08T01:48:28.197 回答
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;
于 2013-05-08T01:49:01.297 回答