By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,077 Members | 1,237 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,077 IT Pros & Developers. It's quick & easy.

Checking a string for valid date

P: n/a
The IsDate code below should result in False, instead it throws the
exception below. Why? How do I check if a string can be converted to a
date if this function does not work properly?

Bob

code:
Dim blnDate_Valid As Boolean = True
Dim x As String = "Hello"

blnDate_Valid = IsDate(x)

Should result in False, but throws exception:

A first chance exception of the type System.FormatException occurred in
mscorlib.dll.

Additional information: the string was not recognized as a valid datetime.
There is a unknown word starting at index 0.


Nov 21 '05 #1
Share this Question
Share on Google+
11 Replies


P: n/a
Dim sDate As String = "3/1/05"
Dim dtConvDate As Date

If IsDate(sDate) Then
dtConvDate = sDate
End If
"Bob Day" wrote:
The IsDate code below should result in False, instead it throws the
exception below. Why? How do I check if a string can be converted to a
date if this function does not work properly?

Bob

code:
Dim blnDate_Valid As Boolean = True
Dim x As String = "Hello"

blnDate_Valid = IsDate(x)

Should result in False, but throws exception:

A first chance exception of the type System.FormatException occurred in
mscorlib.dll.

Additional information: the string was not recognized as a valid datetime.
There is a unknown word starting at index 0.


Nov 21 '05 #2

P: n/a

If you have the IDE set to break on all exceptions and not just
unhandled exceptions then it will break on the exception thrown
internally by the isDate function that it uses to determine if a date
is valid.

Change the IDE setting under Debug > Exceptions...

HTH,

Sam

On Tue, 1 Mar 2005 16:13:27 -0500, "Bob Day" <Bo****@TouchTalk.net>
wrote:
The IsDate code below should result in False, instead it throws the
exception below. Why? How do I check if a string can be converted to a
date if this function does not work properly?

Bob

code:
Dim blnDate_Valid As Boolean = True
Dim x As String = "Hello"

blnDate_Valid = IsDate(x)

Should result in False, but throws exception:

A first chance exception of the type System.FormatException occurred in
mscorlib.dll.

Additional information: the string was not recognized as a valid datetime.
There is a unknown word starting at index 0.


B-Line is now hiring one Washington D.C. area VB.NET
developer for WinForms + WebServices position.
Seaking mid to senior level developer. For
information or to apply e-mail resume to
sam_blinex_com.
Nov 21 '05 #3

P: n/a
Bob,

"Bob Day" <Bo****@TouchTalk.net> schrieb:
The IsDate code below should result in False, instead it throws the
exception below. Why? How do I check if a string can be converted to a
date if this function does not work properly?
[...]
Dim blnDate_Valid As Boolean = True
Dim x As String = "Hello"

blnDate_Valid = IsDate(x)

Should result in False, but throws exception:

A first chance exception of the type System.FormatException occurred in
mscorlib.dll.


'IsDate' internally throws an exception if the string cannot be parsed, but
this exception is caught by 'IsDate'. Nevertheless, the exception is shown
if you configured the IDE to stop whenever an exception is thrown. You can
change this behavior by choosing "Debug" -> "Exceptions..." -> "Common
Language Runtime Exceptions" -> "When the exception is thrown:" -> (o)
"Continue".

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Nov 21 '05 #4

P: n/a
Bob

An answer on your Why?

This is because that internally by Microsoft is used a
Try
Catch

To find the errors.

I hope this helps?

Cor
Nov 21 '05 #5

P: n/a
Thanks everyone, that all makes perfect sense.

Bob
------
"Bob Day" <Bo****@TouchTalk.net> wrote in message
news:eU**************@TK2MSFTNGP09.phx.gbl...
The IsDate code below should result in False, instead it throws the
exception below. Why? How do I check if a string can be converted to a
date if this function does not work properly?

Bob

code:
Dim blnDate_Valid As Boolean = True
Dim x As String = "Hello"

blnDate_Valid = IsDate(x)

Should result in False, but throws exception:

A first chance exception of the type System.FormatException occurred in
mscorlib.dll.

Additional information: the string was not recognized as a valid
datetime. There is a unknown word starting at index 0.

Nov 21 '05 #6

P: n/a
>> blnDate_Valid = IsDate(x)
Should result in False, but throws exception:


Actually, I still think this is an error in VB.NET. I don't understand why
IsDate allows an internally-thrown exception to be caught by the procedure
that calls it. For example, consider the following code:

Dim s As String
s = "Blah"
Debug.WriteLine(IsNumeric(s))
Debug.WriteLine(IsDate(s))

If you run that with the IDE set to break on CLR exceptions, it successfully
processes the IsNumeric() call without any problems, but then breaks into
the IDE on the IsDate() call. This seems inconsistent to me.

The exception can't even be caught by the calling procedure. For example:

Try
Debug.WriteLine(IsDate(s))
Catch ex As Exception
Debug.WriteLine("Error: " & ex.Message)
End Try

Run this with the IDE set NOT to break and you'll find that the exception is
not caught. So there's no reason to allow the IDE to know that an exception
occurred.

IsDate() is the only function in the entire language runtime that I've found
that exhibits this behaviour.

It's also darned annoying. :) I like to run my code with the IDE always set
to break on exceptions as I find it much easier to track problems down if I
can immediately see where the exception occurred. I've had to write a
wrapper around IsDate() that performs some basic validation (not an empty
string, first character is numeric, etc.) before it calls into IsDate in an
attempt to weed out as many non-date values as I can. :-/

Hopefully this will change in VS2005.

--

(O) e n o n e
Nov 21 '05 #7

P: n/a
"Oenone" <oe****@nowhere.com> schrieb:
blnDate_Valid = IsDate(x)
Should result in False, but throws exception:


Actually, I still think this is an error in VB.NET. I don't understand why
IsDate allows an internally-thrown exception to be caught by the procedure
that calls it. For example, consider the following code:

Dim s As String
s = "Blah"
Debug.WriteLine(IsNumeric(s))
Debug.WriteLine(IsDate(s))

If you run that with the IDE set to break on CLR exceptions, it
successfully
processes the IsNumeric() call without any problems, but then breaks into
the IDE on the IsDate() call. This seems inconsistent to me.


Mhm... There is nothing special within 'IsDate''s implementation:

\\\
....
If TypeOf Expression Is String Then
Try
Dim time1 As DateTime =
DateType.FromString(CType(Expression,String))
Return True
Catch exception1 As Exception
End Try
End If
....
///

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>

Nov 21 '05 #8

P: n/a
Herfried K. Wagner [MVP] wrote:
Mhm... There is nothing special within 'IsDate''s implementation:

[...]

Is the implementation of IsNumeric similar to this?

(And how did you get to the sourcecode for the IsDate function?)

--

(O) e n o n e
Nov 21 '05 #9

P: n/a
Oenone,

You don't need the source code, it is just a way it is done, this is the
same

try
dt as datetime = CDate(mydatestring)
catch ex as error
return error
end try

And a kind of same implementation is for IsNumeric.

Cor
Nov 21 '05 #10

P: n/a
Cor Ligthert wrote:
You don't need the source code, it is just a way it is done, this is
the same


I know that, but Herfried was posting from the actual VB IsDate() function.

I've found how to access it myself now (using the DotNet Reflector
application at http://www.aisto.com/roeder/dotnet/). It's very interesting
to see how the functions are working internally. And IsNumeric() is quite a
lot more complex than IsDate()...

--

(O) e n o n e
Nov 21 '05 #11

P: n/a
"Oenone" <oe****@nowhere.com> schrieb:
Mhm... There is nothing special within 'IsDate''s implementation:

[...]

Is the implementation of IsNumeric similar to this?

(And how did you get to the sourcecode for the IsDate function?)


You can check the implementation yourself:

<URL:http://www.aisto.com/roeder/dotnet/Download.aspx?File=Reflector.zip>

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Nov 21 '05 #12

This discussion thread is closed

Replies have been disabled for this discussion.