|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Checking a string for valid dateexception 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. Thanks everyone, that all makes perfect sense.
Bob ------ Show quoteHide quote "Bob Day" <Bob***@TouchTalk.net> wrote in message news:eU2h1NqHFHA.3244@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. > > > > >> blnDate_Valid = IsDate(x) Actually, I still think this is an error in VB.NET. I don't understand why>> Should result in False, but throws exception: 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
Show quote
Hide quote
"Oenone" <oen***@nowhere.com> schrieb: Mhm... There is nothing special within 'IsDate''s implementation:>>> 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. \\\ .... 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/> 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 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 Cor Ligthert wrote:
> You don't need the source code, it is just a way it is done, this is I know that, but Herfried was posting from the actual VB IsDate() function.> the same 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 "Oenone" <oen***@nowhere.com> schrieb: You can check the implementation yourself:>> 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?) <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/>
HLP: Retrieving ListView String Information
Question on updating data ?syntax to recognize code in a 2nd file Scripting Runtime ARRAYLIST ADDING A CLASS sockets O.T.:Shameless Plug to get Free Software(for me & for you too) How to provide hint on sub params? Transpose datagrid row to corresponding label text How to check for scroll bars in web browser object? |
|||||||||||||||||||||||