Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Making CTOD() work in Europe
Message
From
19/11/2018 08:29:27
 
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
01663465
Message ID:
01663527
Views:
42
>>>Hi,
>>>
>>>As I go through my program, I see many places where I convert a string to date, using CTOD(), hard-coded with MM/DD/YYYY. But if the date is (for example), British ("DD/MM/YYYY") it won't work.
>>>
>>>How do you suggest I change all places that use CTOD() from hard-coded use of American date system to another?
>>>
>>>TIA
>>
>>If I had to do this task, I would write a program to scan through every PRG, VCX, SCX, FRX, wherever there was code, and identify all of the expressions with CTOD() and replace them with my_ctod(), and then add FUNCTION my_ctod to my utility.prg or main.prg, whatever is in the SET PROCEDURE TO path.
>>
>>The my_ctod() function would take the incoming form in the MM/DD/YYYY and you could translate it on-the-fly and return the value. Something like this (untested, off the top of my head):
>>
>>
* Note:  tcDate is MM/DD/YYYY
>>FUNCTION my_ctod
>>LPARAMETERS tcDate
>>LOCAL lnMm, lnDd, lnYyyy
>>
>>    lnMm = INT(VAL(GETWORDNUM(tcDate, 1, "/")))
>>    lnDd = INT(VAL(GETWORDNUM(tcDate, 2, "/")))
>>    lnYyyy = INT(VAL(GETWORDNUM(tcDate, 3, "/")))
>>
>>    * Compute date in a standard form
>>    RETURN DATE(lnYyyy + IIF(lnYyyy < 100, INT(YEAR(DATE()) / 1000) * 1000, 0), lnMm, lnDd)
>>
>>Something like that.
>
>Thank you. This sounds like a very good approach.

I should point out that with GoFish, it shouldn't be very hard to simply change all those CTOD() calls to DATE() calls. You just write a little code to parse the CTOD() call to get the parameters and then create the corresponding DATE() call. Then you avoid all the workarounds.

Tamar
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform