Date.parse函数错误

时间:2013-05-12 11:08:10

标签: vb.net

我正在使用date.parse函数格式化文本框中的日期输入。 但是,如果我输入未来日期,则日期解析功能失败。 为什么会这样? 我需要格式化日期并输入未来日期。

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

3 个答案:

答案 0 :(得分:0)

  

我使用了12/5/2013,它工作正常。

实际上,我怀疑它没有。我怀疑它实际上已经解析为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来表示“当前正在执行的线程的文化”,但为了便于阅读,我个人会明确说明这一点
  • 使用返回值确定解析是否失败。如果这表明某处存在错误,那么使用DateTime.ParseExact代替它是有意义的,因为这将引发异常。基本上你需要找出你想要做的错误。

答案 1 :(得分:0)

您需要指定数据字符串所需的格式。日期可以用多种格式书写 - 美国(mm / dd / yyyy)或欧洲(dd / mm / yyyy),两位数年份(yy) )或四位数年(yyyy),不同的分隔符(/)vs(-)等等。名单是无止境的。

您需要明确说明您期望的日期或编写代码以尝试各种格式并应对不正确的输入。

后一种方法的危险在于日期可能含糊不清 - 是2月1日或1月2日的“1/2/2013”​​?

使用带有IFormatProvider的{​​{3}}重载,如果失败则报告错误。

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

答案 2 :(得分:0)

使用DateTime.ParseExact并传递格式并提供。

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