Le 20/12/2016 à 00:13, Charlie Reinl a écrit : > Am Freitag, den 18.11.2016, 16:05 +0100 schrieb Benoît Minisini: >> Hi, >> >> In revision #7983, I fixed a bug in date / string conversion, so that >> now, as it is logically expected: >> >> CDate(CStr(CDate(2))) = CDate(2) >> >> BEFORE: >> >> $ gbx3 -e 'CStr(CDate(2))' >> 01/01/-4801 23:00:00 >> $ gbx3 -e 'CStr(CDate(CStr(CDate(2))))' >> 00/00/0000 23:00:00 >> $ gbx3 -e 'CDate(CStr(CDate(CStr(CDate(2)))))' >> Type mismatch: wanted Date, got String instead >> >> AFTER: >> >> $ gbx3 -e 'CStr(CDate(2))' >> 01/02/-4801 >> $ gbx3 -e 'CStr(CDate(CStr(CDate(2))))' >> 01/02/-4801 >> $ gbx3 -e 'CDate(CStr(CDate(CStr(CDate(2)))))' >> 01/01/-4801 23:00:00 >> >> (Note: The last line is displayed as a local date/time.) >> >> It was not the case before, because the conversion were internally done >> by taking the timezone into account, even if date/time values are >> internally stored in UTC. >> >> Now CDate() on a string always interpret it as an UTC date, and CStr() >> on a date displays its UTC value. >> >> Consequently, check your code! >> >> CStr() and CDate() are not supposed to use a local time representation. >> On the contrary. This is the job of Val(), Str() and Format(). >> >> If you wrote code that made that assumption, you did wrong. >> >> BEWARE! BEWARE! BEWARE! >> > > Salut Benoît and Everyone, > > I used for many moons this: format(Date("10/01/2016"),"mmmm yyyy") > and I didn't felt me concerned by that mail......but: > > format(Date("10/01/2016"),"mmmm yyyy") > gives September 2016 now, gave Oktober 2016 before, > because Date("10/01/2016") returns 30.09.2016 00:00:00 now (at leased > here in Germany). But that is one day lost. > I checked that now on Gambas=3.9.90 r8012 but was also on Revision: 8004 > >
This is what I explained: By writing Date("10/01/2016"), you make a logical error that has been hidden by the described bug, and a misuse of the Date() function. Date("10/01/2016") means Date(CDate("10/01/2016")) (as Date() expects a date). And so "10/01/2016" has to be interpreted as a GMT date, not a local date, as CDate() must not be local-aware. You have to write Val("10/01/2016") instead, provided that "10/01/2016" is actually a local date of course. Regards, -- Benoît Minisini ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user