2013-05-08 177 views
0

我有一個字段返回年份和月份值。例如,20119(2011年是9年,9月是9月)。我怎麼能比較這與當前的一年和一個月來獲得幾個月的差異?例如,在同一個格式的當前年份和月份是20135,所以我要尋找的值是20。20135零下20個月將是20119.不知道如何構建公式動態計算以月爲單位的區別也許使用日期函數。以月計算日期差異

+1

你嘗試過這麼遠嗎?如果你還沒有嘗試過任何東西,看看DateTime對象的[AddMonths(http://msdn.microsoft.com/en-us/library/system.datetime.addmonths.aspx)方法。 – 2013-05-08 01:42:52

回答

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)); 
+0

格式應該是「yyyyM」而不是「yyyym」(幾個月而不是幾分鐘)?當我嘗試這給了我x1 = 01/01/2011 12:09:00 AM – Greg 2013-05-08 01:57:11

+0

@Greg,是的,它應該是M – 2013-05-08 01:57:51

+0

感謝rs。有沒有簡單的方法將當前日期轉換爲「20135」格式?而不必將當前日期的年份部分與當前日期的月份部分連接起來。 – obautista 2013-05-08 02:07:47

1

爲什麼不將年份乘以一年中每個日期字段的月份數然後返回差值?

+0

不知道我是否理解你的權利。你是說:date1 = 20139和date2 = 20138(1個月差異)。 2013 * 9-2013 * 8 = 2013。 – Greg 2013-05-08 01:54:09

+0

(2013 * 12 + 9) - (2013 * 12 + 8) – 2013-05-08 01:58:06

+0

啊 - 這樣更有意義。非常聰明。 – Greg 2013-05-08 02:01:25

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

+0

我不認爲你可以從時間上直接得到幾個月 – Greg 2013-05-08 01:50:59

+0

@Greg:謝謝你的意見。我已經爲這個特殊情況添加了關於TimeSpan對象使用情況的說明。 – 2013-05-08 02:12:12

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; 
1

首先我假設你的問題:

  • 單日個月內將有個位數
  • 年+月的值是一個字符串(如果它是一個int,拋一個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)); 

現在 - 如果你想2天比較在yyyym格式,而不是使用當前的日期,只是年/月轉換上面再上市對此執行month dif公式。

1

您可以使用類則DateDiffTime Period Library for .NET類,計算個月:

// ---------------------------------------------------------------------- 
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