2011-09-08 57 views
3
DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text); 

txtDatumDokum.Text就像「09.09.2011」。DateTime FormatException錯誤

但我得到FormatException錯誤。我必須解析日期嗎?

+0

我在dotNet4.0中也不例外。 – ARZ

+0

嘗試檢查您是否未傳遞NULL或空字符串; –

+0

你在使用哪種文化? –

回答

3

DD.MM.YYYY格式字符串

DateTime.ParseExact(txtDatumDokum.Text, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None); 
+0

在我的電腦中它不起作用:( – Marco

+0

thx它適用於我。所以我必須總是使用DateTime.ParseExact即使日期是有效的像dd.MM.yyyy – senzacionale

+0

@senzacionale你不必使用parseexact,但它是如果您只是以某種特定格式收到日期,那麼建議您使用 –

1

這不是很好看嘗試DateTime.ParseExact,反正試試這個:

string s = "09.09.2011"; 
DateTime dt = Convert.ToDateTime(
    s.Replace(".", 
    new System.Globalization.DateTimeFormatInfo().DateSeparator)); 
-3

代碼:

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text); 

嘗試將其更改爲:

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum); 

和當u打印date/time

打印datuMDokumenta.Text

+0

你確定'ConvertToDateTime()'接受一個TextBox作爲參數嗎? – Marco

+0

它會拋出一個錯誤,你不能使用沒有擴展名的文本框 – ankush

0

你需要爲什麼文字輸入使用這種格式來告訴我們。如果是因爲用戶以這種方式輸入它,那麼您需要確保格式與Thread.CurrentCulture.DateTimeFormat.ShortDatePattern給出的格式相符。改變文化(通過設置 Thread.CurrentCulture)爲合適的值將解決您的問題。

如果你應該解析輸入,不管它是什麼格式,那麼你需要先做一些手動處理(也許從輸入中用string.Replace刪除空格和其他分隔符),然後嘗試解析日期使用DateTime.ParseExact和一個已知的格式字符串。

但這一切都取決於爲什麼輸入具有該格式,以及爲什麼您的應用程序的當前文化與它不匹配。

+0

becouse我使用date.ToString(「dd.MM.yyyy」)。我使用ToShortDateString然後我得到09/08/2011這是不正確的。我們的日期必須像08.09.2011 – senzacionale

+0

Thread.CurrentCulture在緊湊框架中無效3.5 – senzacionale

+0

@senzacionale:如果問題是關於CF 3.5,請標記爲這樣。 – Jon

0

你可以試試這個,TryParse避免解析異常。然後你只需要檢查結果以確保它解析。

DateTime datuMDokumenta; 
bool result = DateTime.TryParse(txtDatumDokum.Text, out datuMDokumenta); 

您必須確定這是否是您的應用程序的良好解決方案。

見這個例子: http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx

在你給你需要包括一個文化的日期來看,DE-DE接受11年1月1日類型的日期,但我不知道哪一個你真正想要使用,你需要決定..代碼是這樣的:

using System.Globalization; 

DateTime datuMDokumenta; 
bool result = DateTime.TryParse(txtDatumDokum.Text, CultureInfo.CreateSpecificCulture("de-DE"), DateTimeStyles.None, out datuMDokumenta); 

文化的名單可以在這裏找到,爲您選擇合適的一個: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo%28v=vs.71%29.aspx

釷這裏加上這個代碼是更多的工作,但它很難打破。假設您在TextBox上使用自由文本輸入,則不希望引發異常。

0

是的,你必須解析當前文化中的輸入日期。

string[] format = new string[] { "dd.MM.yyyy" }; 
string value = "09.09.2011"; 
DateTime datetime; 

if (DateTime.TryParseExact(value, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out datetime)) 
     //Valid 
else 
    //Invalid 
0

的DateTime DT = Convert.ToDateTime(txtDatumDokum.Text)

這是正確的...沒有isssue

0

在緊湊的框架3.5下反序列化呼叫我有一些意外行爲之前。

我已經從使用OpenNETCF序列化類轉換爲框架XML序列化類。在此過程中,默認時間格式已更改,並且屬性/公共成員的順序已更改。長話短說,我公開了一個文本屬性,它將我的日期時間轉換回我的VB6應用程序期望的格式。

  Dim dumbDate As New Date 
      Dim formats() As String = {"yyyy-MM-ddTHH:mm:ss.fffzzz", _ 
             "yyyy-MM-dd HH:mm:ss:fffffffzzz"} 

      _datetimeTaken = dumbDate.ParseExact(value, formats, CultureInfo.InvariantCulture, DateTimeStyles.None) 

      ' There is something wrong with compact framework during the Serialization calls. 
      ' calling the shared method Date.Parse or Date.ParseExact does not produce the same 
      ' result as calling a share method on an instance of Date. WTF?!?!?! 
      ' The below will cause a "Format" exception. 
      '_datetimeTaken = Date.ParseExact(value, formats, CultureInfo.InvariantCulture, DateTimeStyles.None) 

Date.blah不起作用。 dumbDate.blah的作品。奇怪。