我有一个字段返回年份和月份值。例如,20119年(2011年为9年,9月为9月)。我怎样才能将它与当前年份和月份进行比较以获得数月的差异?例如,以相同的格式,当前年份和月份将是20135年,因此我要寻找的值将是20. 20135减去20个月将是20119年。不确定如何构建公式以动态计算月份差异也许使用日期函数。
答案 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)
首先,我通过你的问题假设:
因此,您的值将为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;