[Gambas-user] Beware to revision #7983!

Jussi Lahtinen jussi.lahtinen at ...626...
Tue Dec 20 01:23:52 CET 2016


Or additional requirement for the string, examples "10/01/2016 GMT" or
"10/01/2016 Local".


Jussi

On Tue, Dec 20, 2016 at 2:16 AM, Jussi Lahtinen <jussi.lahtinen at ...626...>
wrote:

> That is bit confusing. Would it be better if Date() function would accept
> one more argument "TimeZone".
> Example:
>
> Date("10/01/2016", gb.GMT)
>
> or
>
> Date("10/01/2016", gb.Local)
>
>
> What you think?
>
>
> Jussi
>
> On Tue, Dec 20, 2016 at 1:50 AM, Benoît Minisini <
> gambas at ...1...> wrote:
>
>> 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 at lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/gambas-user
>>
>
>



More information about the User mailing list