Atara,
As Cor suggests I would use DateTime.ParseExact in the strDate2Date routine.
As to the specifics of the exception:
Are certain that the input string contains only digits & not some other
character?
That you are not inadvertently doing:
dim myDateCreated1 As System.DateTime = strDate2Date("..,,..")
Or other invalid character sequences...
You could always include the debug program database (the .pdb file) for this
user.
If you are compiling with release build you can use "Project - Properties -
Configuration Properties - Build - Generate debugging information" then
install the .pdb file in the same folder as the executable. When you include
the .pdb file, the Stack Trace on Exceptions will include file names & line
numbers, allowing you to identify specifically which line had the problem.
Alternatively you could include a Try/Catch within strDate2Date to give
context information.
Something like:
Public Shared Function strDate2Date(ByVal strDate As String) As
System.DateTime
Try
Dim isOk As Boolean = False
If (strDate Is Nothing) Then
isOk = False
ElseIf Not (strDate.Length() = 6) Then
isOk = False
Else
isOk = True
Dim yyyy As Integer = CInt(strDate.Substring(0, 2)) + 2000
Dim mm As Integer = CInt(strDate.Substring(2, 2))
Dim dd As Integer = CInt(strDate.Substring(4, 2))
Return (New System.DateTime(yyyy, mm, dd))
End If
Return Nothing
Catch ex As Exception
Throw New ArgumentException("Invalid date parameter '" & strDate
& "'", "strDate", ex)
End Try
End Function
This way you will see what the parameter value was, I would consider
creating a new exception class that derives from ArgumentException that
included both the parameter name & its value (ala
ArgumentOutOfRangeException) instead of using ArgumentException directly.
Hope this helps
Jay
"Atara" <Atara@DD.com> wrote in message
news:O7J4ws22EHA.1076@TK2MSFTNGP09.phx.gbl...[color=blue]
> In my apllication I use the following code:
>
> '-- My Code:
> Public Shared Function strDate2Date(ByVal strDate As String) As
> System.DateTime
> Dim isOk As Boolean = False
> If (strDate Is Nothing) Then
> isOk = False
> ElseIf Not (strDate.Length() = 6) Then
> isOk = False
> Else
> isOk = True
> Dim yyyy As Integer = CInt(strDate.Substring(0, 2)) + 2000
> Dim mm As Integer = CInt(strDate.Substring(2, 2))
> Dim dd As Integer = CInt(strDate.Substring(4, 2))
> Return (New System.DateTime(yyyy, mm, dd))
> End If
> Return Nothing
> End Function
>
> dim myDateCreated1 As System.DateTime = strDate2Date("020801") ' 1
> Aug 2002
> dim myDateCreated2 As System.DateTime = strDate2Date("040404") ' 4
> Apr 2004
> dim myDateCreated3 As System.DateTime = strDate2Date("040420") ' 20
> Apr 2004
> dim myDateCreated4 As System.DateTime = strDate2Date("041104") ' 4
> Nov 2004
> '-- Code till here.
>
> On of my Italian client got the exception:
>
> '-- Exception:
> System.ArgumentException: The currency separator information specified
> in the NumberFormatInfo is ambiguous for parsing.
> at Microsoft.VisualBasic.CompilerServices.DoubleType. Parse(String
> Value, NumberFormatInfo NumberFormat)
> at
> Microsoft.VisualBasic.CompilerServices.IntegerType .FromString(String
> Value)
> at myassembly.strDate2Date(String strDate)
> '-- Exception till here.
>
> When googling I understood that the VB compiler compiles CInt into -
> Microsoft.VisualBasic.CompilerServices.IntegerType ::FromString(string)
>
> So the exception is coming from one of the following lines:
> CInt("01")
> CInt("02")
> CInt("04")
> CInt("08")
> CInt("11")
> CInt("20")
>
> Any idea why do I get an exception?
> Do I have to use [NumberFormatInfo and CultureInfo] whenever I parse
> strings to numbers?
>
> Thanks.
>
> Atara.
>
>
>
> *** Sent via Developersdex
http://www.developersdex.com ***
> Don't just participate in USENET...get rewarded for it![/color]