【问题标题】:VB.Net Validating DateVB.Net 验证日期
【发布时间】:2016-11-03 20:34:41
【问题描述】:

遇到了一个小问题——我有一个函数可以将 DATE 作为字符串传递。然后这个日期作为参数传递给我验证它的存储过程,无论它是否有效,它都会返回一个值 (0,1)。这是代码方面发生的事情......

If CheckDateSP(mskAppointment.Text) Then
   'Great now lets use this date
else
   msgbox "Invalid date, re-enter please"
End if

将其传递给函数.....

Public Function CheckDateSP(ByVal CheckThisDate As String) As Boolean
    'Setting Connection strings and all the good stuff 
    'here's where it gives me an error
     Dim vDate As DateTime = CheckThisDate <----HERE is the error

End Function

现在这里是有趣的部分 - 如果我输入一个日期,例如...,我只会得到一个错误。

2016 年 13 月 13 日

如果我输入这样的日期,一切都会很好......

2017 年 12 月 12 日,2014 年 10 月 10 日

或任何其他日期,只要月份小于 13

我得到的错误是......

从字符串 '13/13/2016' 转换为日期类型的错误无效。

【问题讨论】:

  • 13/13 ?????????
  • 然后使用 DateTime.TryParse 避免异常
  • @Steve 也许是阴历
  • 确保您使用的是正确的日期格式,例如,如果格式为 mdy (mm/dd/yyyy),那么您的日期将无效并且会报错。
  • 您可以使用以下方法更改 sql 中的日期格式:“set dateformat dmy”语句用于 dd/MM/yyyy 格式或“set dateformat mdy”用于 MM/dd/yyyy 格式。

标签: sql-server vb.net validation date


【解决方案1】:

试试这个

Dim input As String = "13/13/2016"

Dim dt As DateTime
If DateTime.TryParseExact(input, "MM/dd/yyyy", New Globalization.CultureInfo("en-US"), Globalization.DateTimeStyles.None, dt) Then
    MessageBox.Show(String.Format("The string '{0}' parsed to '{1:yyyy-MM-dd hh:mm:ss}'", input, dt))
Else
    MessageBox.Show(String.Format("Couldn't parse '{0}'", input))
End If

TryParseExact 的调用在格式正确时返回true,在格式不正确时返回false。请注意,提供给TryParseExact 的格式是月/日/年格式,我使用Globalization.CultureInfo("en-US") 因为我在美国。

【讨论】:

  • 非常感谢。
  • 不能使用 DateTimePicker 代替 MaskedTextBox 太糟糕了。它返回一个 DateTime,所以你不需要为此烦恼。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2016-07-09
  • 2018-09-12
  • 2020-02-23
  • 2012-08-15
相关资源
最近更新 更多