2013-05-12 80 views
0

我正在使用date.parse函數格式化文本框中的日期輸入。 但是,如果我輸入將來的日期日期解析功能失敗。 這是爲什麼? 我需要格式化日期並輸入將來的日期。Date.parse函數錯誤

If IsDate(TransactionDate.Text) Then 
      TransactionDate.Text = Date.Parse(TransactionDate.Text) 
     Else 
      MsgBox("Enter correct Transaction date") 
      TransactionDate.Focus() 
     End If 
+1

什麼是您的示例輸入?你會得到什麼錯誤? – Steve 2013-05-12 11:10:48

+0

你有一些你使用的數據的例子嗎?它的第五十二,所以你可能會使用美國的日期格式,並得到該問題(或反之亦然) – gordatron 2013-05-12 11:11:06

+0

(如2013年5月13日是我們的格式錯誤 - 如果今天是12/05/2013) – gordatron 2013-05-12 11:11:35

回答

0

我用2013年12月5日,它工作得很好。

我懷疑它沒有,實際上。我懷疑它實際上解析爲2013年12月5日,當你的意思是2013年5月12日。

它似乎試圖解析它作爲MM/dd/yyyy的格式,而你的意思是dd/MM/yyyy。

這可能是因爲您使用的線程在美國文化中。

我建議你使用DateTime.TryParseExact

  • 如果要指定精確的格式,你可以做到這一點使用custom date/time format pattern
  • 如果你想允許.NET使用恰當的格式爲文化,您可以使用standard date/time format pattern
  • 指定要用於解析的區域性,如果要解析機器生成的文本,請使用CultureInfo.InvariantCulture。您可以使用null表示「當前執行的線程的文化」,但我個人倒作出這樣的明確,爲便於閱讀
  • 使用返回值來確定分析是否失敗。如果這表明某個地方有bug,那麼使用DateTime.ParseExact代替它會很有意義,因爲這會引發異常。基本上你需要弄清楚你想要做什麼錯誤。
0

您需要指定您期待數據字符串的格式。日期可以以多種格式寫入 - 美國(mm/dd/yyyy)或歐洲(dd/mm/yyyy),兩位數年(yy)或四位數年(yyyy),不同分隔符(/)與(-)等。名單是無止境的。

您或者需要明確指出您期望的日期,或者編寫代碼以嘗試各種格式並處理不正確的輸入。

後一種方法的危險是日期可能不明確 - 「1/2/2013」​​是2月1日還是1月2日?

使用Date.TryParse的過載,該過載需要IFormatProvider並在失敗時報告錯誤。

dateString = "2008-03-01 10:00" 
culture = CultureInfo.CreateSpecificCulture("fr-FR") 
styles = DateTimeStyles.AdjustToUniversal Or DateTimeStyles.AssumeLocal 
If DateTime.TryParse(dateString, culture, styles, dateResult) 
    Console.WriteLine("{0} converted to {1} {2}.", _ 
        dateString, dateResult, dateResult.Kind) 
Else 
    Console.WriteLine("Unable to convert {0} to a date and time.", dateString) 
End If 
0

使用DateTime.ParseExact並傳遞格式並提供。

dateString = "13/05/2013"; 
    format = "dd-MM-yyyy"; 
    CultureInfo provider = CultureInfo.InvariantCulture; 
    var result = DateTime.ParseExact(dateString, format, provider);