2013-05-12 51 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);