[Gambas-user] Format function changes date value

Jussi Lahtinen jussi.lahtinen at gmail.com
Thu Jun 7 21:36:43 CEST 2018


This is how I do it, when I want to save & load the values as string,
without being influenced by timezones.

Write as string:

sStringToBeSaved = Subst("&1/&2/&3 &4:&5:&6", Format(Month(hDateAndTimel),
"0#"), Format(Day(hDateAndTimel), "0#"), Year(hDateAndTimel),
Format(Hour(hDateAndTimel), "0#"), Format(Minute(hDateAndTime), "0#"),
Format(Second(hDateAndTimel), "0#"))


Read as date:

Dim sStr, sDate, sTime As String[]

      sStr = Split(sLoadedString, " ")

      sDate = Split(sStr[0], "/")
      sTime = Split(sStr[1], ":")

      hDateAndTime = Date(sDate[2], sDate[0], sDate[1], sTime[0], sTime[1],
sTime[2])



Jussi

On Thu, Jun 7, 2018 at 9:34 PM, ML <d4t4full at gmail.com> wrote:

> On 07/06/18 15:11, Gianluigi wrote:
>
> 2018-06-07 17:12 GMT+02:00 Benoît Minisini <g4mba5 at gmail.com>:
>
>> Le 07/06/2018 à 16:51, Gianluigi a écrit :
>>
>>> I wrote it even if I imagined it was wrong (it works here), I'm sorry.
>>> It's useless, with the dates I still do not understand anything.
>>> These coming days, I will try to write a my wiki to and submit it to
>>> your judgment.
>>> Regards
>>> Gianluigi
>>>
>>>
>> I try to explain again:
>> 1) Date & times are internally represented in UTC date. See them as a
>> number of days since an absolute instant in the past. You can get this
>> number with CFloat(AnyDate). The integer part is the number of days, the
>> fractional part is the part of the day (the precision is the millisecond).
>> 2) Each time you read or you write a date & time as a string, you *must*
>> know the timezone associated with the string representation. *But* this
>> timezone is implicit, as it is not written inside the string representation
>> (something that I should add to Gambas).
>> In other words, "2018/6/7" *cannot* represent an absolute time instant.
>> It depends on the implicit timezone.
>> 3) So, all Gambas functions that deal with date & time as a string *must*
>> assume a timezone. Some functions assume UTC timezone, and others assume
>> local timezone. Normally, all documentation pages on the wiki says which
>> one is used.
>> Is it clearer now?
>> --
>> Benoît Minisini
>>
>>
> Hi Benoit,
> sorry for the delay, I had to go out.
> The difference between local and UTC is clear to me.
> I find it difficult to memorize, to fix well in my mind, to fully
> understand the translation into the string.
> Suppose we have a CUsers class where I store user data including the date
> of birth.
> Suppose I use this class as an array:
>    hObj = New CUsers (iId, sName, sSurName, dDate, ...)
>    $hGlobalObject.Add(hObj)
> If I have to save the date in an ini file like Settings and I want to be
> sure that I do not have problems, how do I translate the date to be saved
> into a string, and then how can I re-translate it into a date format from
> ini?
> So I'm in confusion, I would use CStr and then CDate to stay in UTC and
> then display the dates with Format.
> I know I'm an idiot, and I'll continue to use a database...
> Regards
> Gianluigi
>
>
> I'd break the date down to day, month, year, and store them as 3 separate
> data units.
> Then, when retrieving, read the three separate data items and use:
>
>   Dim userBirthday As Date = Date(savedYear, savedMonth, savedDay)
>
> So userBirthday will be a Date with the proper value... If I inderstood it
> correctly, that is!
>
>
> ----[ Gambas mailing-list is hosted by https://www.hostsharing.net ]----
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.gambas-basic.org/pipermail/user/attachments/20180607/34438e6c/attachment.html>


More information about the User mailing list