2011-01-31 90 views
0

我試圖將此內容轉換爲DateTime。轉換爲日期時間問題

DateTime dtmNextPayment = Convert.ToDateTime(DateTime.Now.AddMonths(1).Month.ToString() + "/" + DateTime.Now.Day.ToString() + "/" + DateTime.Now.AddYears(1).Year.ToString()); 

在這裏,我收到一個異常「字符串未被識別爲有效的日期時間」。我在哪裏做錯了?有人能幫助我嗎?預先感謝您..

+0

這是一個非常糟糕的例子。其實我有不同的情況下不同的情況。我的意圖是轉換成月/日/年的形式。 – Ram 2011-01-31 19:00:04

+0

如果您不幫助我們幫助您,我們無法幫助您。給我們一個很好的例子來解決問題。 – jason 2011-01-31 19:03:41

回答

4

這裏有很多問題。首先,你永遠不想像你一樣重複使用DateTime.Now。相反,

DateTime now = DateTime.Now; 

然後使用now。您這樣做的原因是因爲DateTime.Now可能會在兩次呼叫之間轉移到新的一天,一個月或一年。

當然,這並不能解決您的問題。現在我們來解決這個問題。你都清楚地試圖一個月增加now,那麼爲什麼不

DateTime dtmNextPayment = now.AddMonths(1); 

需要注意的是now.AddMonths(1)不發生變異now這是非常重要的;這就是爲什麼您必須將其分配給DateTime的新實例。

接下來,你的文章的原始版本有

DateTime dtmNextPayment = Convert.ToDateTime(DateTime.Now.AddMonths(1).Month.ToString() + "/" + DateTime.Now.Day.ToString() + "/" + DateTime.Now.Year.ToString()); 

DateTime.Now是2011年12月1日,這將產生

new DateTime(2011, 1, 1); 

我懷疑是你想要什麼。你明白爲什麼?

你試圖在

new DateTime(2012, 2, 1) 

編輯這個結果的日期是1月1日,2011年我懷疑這是你想要的大部分企業都還不到一個月,和一年賬單提前。請停下來想一下。

此外,你會得到一個execption,例如,如果這一天是2011年1月31日,因爲沒有2011年2月31日(或2012年2月31日)對這一問題。這就是爲什麼你正在得到你現在得到的例外。明天(2011年2月1日)運行你的代碼,這將是「很好」。

最後,不要做你正在做的事情,因爲存在嚴重的文化問題。並非所有的文化格式都以您嘗試設置格式的方式進行。

道德:DateTime已經內置的方法已經過測試,並避免所有這些該死的問題。使用它們。任何時候,當你試圖對幾乎任何對象進行邏輯處理時,都會將其中的一部分轉換爲字符串,然後再轉換回來,從而引發嚴重的不良代碼異味。

3

只是這樣做:

DateTime dtmNextPayment = DateTime.Now.AddMonths(1); 

無需創建一個字符串,只是解析它右後衛DateTime對象。

0

你爲什麼不使用: DateTime dtmNextPayment = DateTime.Now.AddMonths(1);

0

試試這個:

DateTime dtmNextPayment = DateTime.Now.AddDays(1).AddMonths(1).AddYears(1); 

這裏你得到的當前時間,以及加入了一天月份和年份。