Page 1 of 1
uCharToVal returns "01/01/2020" as 20/09/0090
Posted: Mon May 04, 2020 6:05 pm
by hua
Hi Rao,
Is my usage of uCharToVal() wrong?
Code: Select all
#include "fivewin.ch"
proc main()
set century on
set date british
? uCharToVal("01/01/2020", "D")
return
The above snippet gave result as 20/09/0090.
Compiled with Harbour+FWH1912
TIA
Re: uCharToVal returns "01/01/2020" as 20/09/0090
Posted: Mon May 04, 2020 6:07 pm
by Antonio Linares
? DToS( CToD( "01/01/2020" ) )
Re: uCharToVal returns "01/01/2020" as 20/09/0090
Posted: Tue May 05, 2020 9:22 am
by nageswaragunupudi
We will look into the function.
Re: uCharToVal returns "01/01/2020" as 20/09/0090
Posted: Fri May 08, 2020 1:35 pm
by nageswaragunupudi
The bug is fixed in version FWH2005 to be released.
You can make this correction and test.
In the module \fwh\source\function\valtostr.prg:
please replace the existing
static function dCharToDate( cDate )
with the following revised function:
Code: Select all
static function dCharToDate( cDate )
local cFormat, cc, cfmt
local dDate
if ( cc := Upper( cDate ) ) != Lower( cDate )
return dAlphaToDate( cc )
endif
if Len( cDate ) >= 8 .and. IsDigit( SubStr( cDate, 3 ) ) .and. IsDigit( SubStr( cDate, 5 ) ) .and. ;
! Empty( dDate := SToD( Left( cDate, 8 ) ) )
return dDate
endif
if Len( cDate ) >= 10 .and. IsDigit( SubStr( cDate, 3 ) ) .and. !IsDigit( SubStr( cDate, 5 ) ) .and. ;
!IsDigit( SubStr( cDate, 8 ) ) .and. ;
! Empty( dDate := StoD( Left( cDate, 4 ) + SubStr( cDate, 6, 2 ) + SubStr( cDate, 9, 2 ) ) )
return dDate
endif
// check for single digit date/month
if !IsDigit( SubStr( cDate, 2 ) )
cDate := "0" + cDate
endif
if !IsDigit( SubStr( cDate, 5 ) )
cDate := Left( cDate, 3 ) + "0" + SubStr( cDate, 4 )
endif
//
cFormat := Lower( Set( _SET_DATEFORMAT ) )
dDate := CToD( cDate )
if Empty( dDate )
cc := Left( cFormat, 2 )
for each cFmt in { "dd/mm/yy", "mm/dd/yy", "yy/mm/dd" }
if !( Left( cFmt, 2 ) == cc )
SET( _SET_DATEFORMAT, cFmt )
if !Empty( dDate := CTOD( cDate ) )
EXIT
endif
endif
next
endif
Set( _SET_DATEFORMAT, cFormat )
return dDate
We'll be glad if you can test and let us have your feedback.
Re: uCharToVal returns "01/01/2020" as 20/09/0090
Posted: Fri May 08, 2020 10:44 pm
by hua
Hi Rao,
Yes I got the expected result with the fixed version.
Thank you