【问题标题】:TryParse Date when not valid custom error message自定义错误消息无效时的 TryParse 日期
【发布时间】:2018-12-10 14:23:51
【问题描述】:

我有一个TryParse.Date() 验证,用于验证通过文本框传入的日期,如果它无效,则显示自定义消息框警告。

但是,在测试而不是返回 False 并显示消息框时,它只是显示一个错误异常,提及 String passed is not a valid Date

这是我的代码片段

If Not Date.TryParse(txtDate.Text, "dd/MM/yyyy")
    MsgBox("Please enter a valid Date", MsgBoxStyle.Critical)
    Return
End If

所以如果我传入01/01/99d 的字符串值,它将显示异常消息,而不是返回并进入循环?

有什么建议吗?

【问题讨论】:

    标签: vb.net datetime tryparse


    【解决方案1】:

    那不是TryParse works。第二个参数期望一个日期对象。我强烈建议您打开 Option Strict。

    您正在寻找的是TryParseExact。它允许您设置自己的格式,但您仍然需要将日期对象作为参数传递。页面上有很好的示例,但我认为您可以将参数设置为 Nothing。

    Dim theDate As Date
    
    If Not DateTime.TryParseExact(txtDate.Text, "dd/MM/yyyy", Nothing, Nothing, theDate) Then
    ...
    

    注意:基于 Rango 注释,即使您使用“/”作为分隔符。这可能会导致具有不同文化的人出现问题。我强烈建议您正确设置文化,而不是使用 Nothing。

    【讨论】:

    • dd/MM/yyyy"Nothing 一起使用可能会导致意外行为,因为斜杠将被替换为您当前文化的日期分隔符,这可能会有所不同。
    • @Rango 我不知道,我强硬的 ParseExact 会强制 /
    • 不,因为/ 本身就是custom format specifier。使用InvariantCulture 或用刻度线' 掩盖它们。 Nothing(或 C# 中的 null)表示:使用当前文化
    【解决方案2】:

    如果您查看正在使用的Date.TryParse 重载的定义,您会发现第二个参数应该是通过引用传递的Date

    这意味着第二个参数不应该是字符串。

    您可以更改代码以正确使用第二个参数:

    Dim dateParam As Date
    
    If Not Date.TryParse(txtDate.Text, dateParam) Then
        MsgBox("Please enter a valid Date", MsgBoxStyle.Critical)
        Return
    End If
    

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 2015-06-24
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多