2012-06-01 99 views
2

我需要一個StringDateTime格式轉換,爲了這個,我只是試圖像日期時間轉換 - 使用格式

DateTime.ParseExact(DateOfBirth,"MM/dd/yyyy",CultureInfo.InvariantCulture); 

它的正常工作,當我傳似05/30/2012值。

但是,如果我嘗試通過值5/30/2012其示值誤差:

String was not recognized as a valid DateTime

爲了解決這個問題我試着像

DateTime.ParseExact(String.Format("{0:MM/dd/yyyy}", DateOfBirth), "MM/dd/yyyy", 
                CultureInfo.InvariantCulture); 

它仍然沒有工作。這裏如果我嘗試String.Format("{0:MM/dd/yyyy}", DateOfBirth)的價值5/30/2012其顯示相同的格式,而不是05/30/2012

我怎樣才能解決這個問題,任何人都可以幫助我在這裏...

檢查此鏈接 string to DateTime conversion in C#

+1

你可以試試'的​​DateTime.Parse'代替'DateTime.ParseExact'。 –

+1

雅是多數民衆贊成在簡單的方式,但如果我使用它,它在我的本地系統工作,但在服務器託管appln後,它顯示相同的錯誤,這就是我在這裏使用'parseExact' – shanish

+2

我不是靠近編譯器權利現在,但是「M/d/YYYY」作爲格式呢?我認爲格式說明符MM預計會在1-9個月前添加一個0。我假設,如果你做5/30/2012,你也想在2012年5月5日做一個沒有領先0的月份。 – JasonD

回答

2

使用M/d/yyyy而不是您正在使用的格式說明符。使用只有一個M匹配幾個月與前導零。 d也是如此。

+0

是你的權利,第一種方法'M/d/yyyy'完美工作,謝謝 – shanish

1

嘗試只是 「d」,而不是 「MM/DD/YYYY」。

所以,語句應該是:

var date = DateTime.ParseExact(DateOfBirth, "d", CultureInfo.InvariantCulture); 

這個文檔是在這裏: http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

編輯

哎呀,我看錯文檔。它應該是「M/d/yyyy」。

+0

感謝您的迴應,它的不工作,仍然得到相同的錯誤。 – shanish

+0

@Shanish,你說得對。固定。 – devuxer

+0

感謝DanM,現在它的工作 – shanish

1

假設你DateOfBirth字符串總是用斜槓分隔,你可以嘗試這樣的事:

string[] dateParts = DateOfBirth.Split('/'); 
DateTime.ParseExact(string.Format("{0:00}", dateParts[0]) + "/" + string.Format("{0:00}", dateParts[1]) + "/" + string.Format("{0:0000}", dateParts[2])); 

我認爲這個問題是格式字符串不能被識別,因爲DateOfBirth不是DateTime對象。因此,您可以通過重新格式化字符串執行格式化自己

+0

謝謝alex,我會檢查它 – shanish

1

有可能是你的興趣的重載

DateTime.ParseExact(DateOfBirth, 
        new[] { "MM/dd/yyyy", "M/dd/yyyy" }, 
        CultureInfo.InvariantCulture, 
        DateTimeStyles.None); 

這會幫助你照顧單一以及兩位數月份部分(因爲5是因爲格式爲MM

+0

感謝V4Vendetta,我會檢查它 – shanish

1

由於您的字符串中有分隔符(即/),因此您可以這樣做;

DateTime.ParseExact(DateOfBirth,"M/d/yyyy",CultureInfo.InvariantCulture); 

,它將分析無論是單或雙位數的天/月。當你使用MM/dd/yyyy時,你要求它們都是雙位數字,這顯然不是你想要的。

+0

謝謝Jachim,其工作完美,謝謝 – shanish

1

如果你需要使它文化無關..

var dateTimeFormat = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentUICulture.Name).DateTimeFormat; 
dateTimeFormat.ShortDatePattern = 
    Regex.Replace(Regex.Replace(dateTimeFormat.ShortDatePattern, "[M]+", "MM"), "[d]+", "dd"); 

var newDate = date.HasValue ? date.Value.DateTime.ToString("d", dateTimeFormat) : null; 
+0

感謝羅賓,我會檢查它 – shanish

+0

@Shanish:另外請注意,根據您的情況,我已經使用了'MM'和'dd',而不是'M'和'd'。你也可以嘗試。 –