| Subject |
Re: date settings |
| From |
Mustansir Ghor <mustan31@hotmail.com> |
| Date |
Sat, 02 Jan 2021 03:00:28 -0500 |
| Newsgroups |
dbase.getting-started |
Dear Gaetano
Thank you.
Regards
Mustansir
Gaetano Wrote:
> On 02/01/2021 06:47, Ken Mayer wrote:
> > On 1/1/2021 12:20 PM, Gaetano wrote:
> >> On 02/01/2021 04:04, Ken Mayer wrote:
> >>
> >> What Mustansir is seeing is typical of YMD string interpretation in
> >> dBase. When you recently asked a question about dates in NG.Internet,
> >> I did a couple tests and I had a similar output with year = 2007 I
> >> think. Now the incorrect years are 2021 or 2183 (there isn't even a
> >> "3" or an "8" in the string, where does 2183 come from?):
> >
> > Okay, well perhaps this should be (if it hasn't been) reported in the
> > bug-reports newsgroup. I don't know what else to say.
> >
> > Ken
> >
> Already done, by a few people, including myself, but the workarounds are
> easy, so the chances of this being fixed are low.
>
> Attaching a simple form to demonstrate the behaviour, the old setting is
> stored and restored:
>
> function form_onOpen()
> clear
> this.entryfield1.value=date()
> a=this.entryfield1.value
> cOld = set('date')
> set date to YMD
> b=this.entryfield1.value
> set date to &cOld
> msgbox("Value before changing to YMD= "+a+CHR(10)+;
> "Value after changing to YMD= "+b)
> return
>
>
> Note to Mustansir, if the purpose of changing the date format to YMD is
> to load in SQL, I would recommend to leave your local settings as they
> are and write a small function to handle the dates.
>
> I have put together this code to generate an SQL and data object
> compatible output:
>
> function DTTOS(dDT)
> local dDate,tTime,cRet
> //must supply a dateTime value, e.g. from Timestamp field or {literal
> timestamp} or datetime()
>
> dDate =
> substr(DTOS(dDT),1,4)+"-"+substr(DTOS(dDT),5,2)+"-"+substr(DTOS(dDT),7,2)
> tTime = TTOC(dDT)
> cRet = dDate+" "+tTime
> return cRet
>
> Because DTOS() will produce the same text string based on a datetime
> input, no matter your local settings, DTTOS() will always produce the
> same format which you can use both in dBase and in SQL.
>
> If you only need the date part of it, this will do the trick:
>
>
> function DTOSQL(dDT)
> local dDate,cRet
> //must supply a date value, e.g. {literal date}, CTOD(<date>), or date()
>
> cRet =
> substr(DTOS(dDT),1,4)+"-"+substr(DTOS(dDT),5,2)+"-"+substr(DTOS(dDT),7,2)
>
> return cRet
>
> ** END HEADER -- do not remove this line
> //
> // Generated on 01/02/2021
> //
> parameter bModal
> local f
> f = new MG_datesForm()
> if (bModal)
> f.mdi = false // ensure not MDI
> f.readModal()
> else
> f.open()
> endif
>
> class MG_datesForm of FORM
> with (this)
> onOpen = class::FORM_ONOPEN
> height = 16.0
> left = 117.0
> top = 0.0
> width = 70.4286
> text = ""
> endwith
>
> this.ENTRYFIELD1 = new ENTRYFIELD(this)
> with (this.ENTRYFIELD1)
> height = 1.0
> left = 28.0
> top = 3.0
> width = 14.7143
> value = ""
> endwith
>
>
>
> function form_onOpen()
> clear
> this.entryfield1.value=date()
> a=this.entryfield1.value
> cOld = set('date')
> set date to YMD
> b=this.entryfield1.value
> set date to &cOld
> msgbox("type of entryfield= "+type("this.entryfield1.value")+CHR(10)+;
> "Value before changing to YMD= "+a+CHR(10)+;
> "Value after changing to YMD= "+b)
> return
>
> endclass
>
|
|