2010-03-01 113 views
6

我工作在C#上的算法基於對輸入字符串具有以下特徵來計算過去的日期時間:計算過去在C#日期時間

的字符串包含一個整數,其後是「d」,「M」或「Y」,如「1D」或「90M」。

輸出將是DateTime.Now減去相應的天數,月或年。

我遇到的問題是,例如,如果我切換正則表達式(D,M或Y)上的輸入字符串並從DateTime.Now中減去相應的TimeSpan,則新的TimeSpan()構造函數不接受幾個月或幾年,只有幾天。

if (new Regex(@"[0-9]+D").IsMatch(value)) 
{ 
    newDate = DateTime.Now - TimeSpan(Int32.Parse(value.Replace("D", "")), 0, 0); 
} 

這種邏輯是好的,如果輸入的字符串是天,但時間跨度的構造不接受月或數年,如果我假設每個月有30天,或每年有這將是令人難以置信的不準確365天。

有沒有人有關於如何實現這個算法的想法?

謝謝!

+0

你有沒有想過如何實現它?因爲到目前爲止,你的技術看起來像:「問這麼說,也許有人會爲我做」。告訴我們你已經嘗試了什麼! – 2010-03-01 21:24:15

回答

15

DateTimeAddMonths,AddDaysAddYears方法。使用它們減去減去

+0

這樣做的最合理和可讀的方法 – 2010-03-01 21:03:40

+0

對於一些非常糟糕的原因,我想我需要使用SubtractDays等方法來做到這一點。原來,添加底片具有相同的效果。我可能不得不重新獲得一個基本的代數課程...... TY! – 2010-03-01 22:25:43

0

要減去幾個月,我創建一個新的DateTime,並且只是評估月/年。因此1/2010 - 6個月將是6/2010 ...一旦您確定了月/年,您可以查看原始日期時間日組件,並確保它在月內適合。

這就是我所做的。年份也以同樣的方式進行評估。減去日子很簡單;使用TimeSpan組件來完成它。

3

難道你寧願嘗試使用AddDays/AddMonths/AddYears但負數?

DateTime.AddDays Method

值參數可以是負正 。

然後,也許只是實現一個開關stament來應用適當的Add方法。