Is the DateFormat read only?

David Bovill david.bovill at gmail.com
Sat Nov 7 14:11:08 EST 2020


Looks like a bug to me. So I’d say yes?

I’m pretty puzzled why convert does not work with internet date. It seems a bit of a waste to make the internet date a format that you can only display and not  manipulate? Tests here indicate that converting an internet date to seconds makes no difference with regard to the time zone bit you include - to illustrate here is a function that I had to make to convert internet dates:
	function date_GetInternetSeconds iDate
	    put word -1 of iDate into iDateOffset
	    convert iDate to seconds -- this ignores the last "+0050" iDateOffset bit
	    _AddInternetDateOffset iDate, iDateOffset
	    return iDate
	end date_GetInternetSeconds

	private command _AddInternetDateOffset @dateInSeconds, iDateOffset
	    put char 2 to 3 of iDateOffset into sHours
	    put char 4 to 5 of iDateOffset into sMin
	    --
	    if char 1 of iDateOffset = "+"then
	            add sHours * 60*60 to dateInSeconds
	            add sMin * 60 to dateInSeconds
	        else
	            subtract sHours * 60*60 from dateInSeconds
	            subtract sMin * 60 from dateInSeconds
	    end if
	end_AddInternetDateOffset

Does this really make sense?
On 7 Nov 2020, 14:37 +0000, matthias rebbe via use-livecode <use-livecode at lists.runrev.com>, wrote:
> Alex,
>
> i've posted already some info about how to use the time zone library in Livecode server in my comment to David's post "Aw: Basic question: Time Zone Library".
>
> Here it is again and a little bit more detailed.
>
> 1. copy the folder com.livecode.library.timezone from the LC extensions folder to your webserver into a folder extensions. The extensions folder can be found in the App Bundle on macOS or in the windows program folder
> e.g. C:\Program Files (x86)\RunRev\LiveCode Business 9.6.1
>
> 2. place your .lc script in the same folder where the extensions folder exists.
>
> 3. configure/set the path where the shared library for your server os is located (see line 3 in the sample script below)
> 4. load the extension module.lcm (see line 4 in the sample script below)
>
> The following script uses the time zone library to output the available time zones
>
> <?lc
> put the folder into tBasePath
> set the revLibraryMapping["tz"] to tBasePath &"/extensions/com.livecode.library.timezone/code/x86_64-linux/tz.so"
> load extension from file tBasePath & "/extensions/com.livecode.library.timezone/module.lcm"
> put timezones() into tTZ
> replace return with "<br>" in tTZ
> put tTZ
> ?>
>
>
>
> -
> Matthias Rebbe
> Life Is Too Short For Boring Code
>
> > Am 07.11.2020 um 13:57 schrieb Alex Tweedly via use-livecode <use-livecode at lists.runrev.com>:
> >
> > Thanks Graham. That does indeed work - on your local system.
> >
> > The issue I am trying to deal with (and maybe it's related to what David is doing) is dealing with time zone issues on a LC web server. If you want to timestamp when some event happens, you can do that as a UTC timestamp using a function like this one of yours; but that leaves you two problems.
> >
> > - presenting those timestamps back to the user - which should be in *their* local time
> > - allowing the user to provide their own timestamp - again should be local for them.
> >
> > Most advice I've found via Google, etc. suggests keeping the timestamps in UTC, and asking the user to provide their timezone - usually when they 'register'. You can then use PHP (or ...) functions to convert a date/time between UTC and their local zone.
> >
> > You might hope to do that in LC using 'convert .. to internet date' - but that doesn't work because that conversion (seems to) assume a local time, and then simply fill in the time offset for the local system (i.e. the problem David reported).
> >
> > You should be able to do it using the TimeZone library - but I haven't figured out how to to do that, or I'm using it wrong, or something. (I didn't know about the Timezone library until David mentioned it yesterday.)
> >
> > I'm currently using an ugly (though working :-) workaround using e.g.
> >
> > put "America/New_York" into timeZone
> >
> > *put*shell("TZ=" & timeZone & " date") into tmp
> >
> > and working it all out from there (assumes Unix server - don't know if it works on others).
> >
> > Alex.
> >
> >
> >
> > On 07/11/2020 10:27, Graham Samuel via use-livecode wrote:
> > > I am as confused as anyone else as to what you are trying to do, but just in case, this little function seems to work for me to get the ’standard’ UTC date format which I have to use in my app to put time stamps into GPX files. It apparently produces the correct time zone. Doubtless it could be more elegantly coded.
> > >
> > > Hope it helps - who knows?
> > >
> > > Graham
> > >
> > > function fUTCTime
> > > local t1,t2,t3
> > > -- this gets the current time and puts it into UTC format, i.e YYYY-MM-DDThh:mm:ssTZD
> > > put word 5 to 6 of the internet date into t3 -- we are interested in the time and time zone
> > > put the long time into t1
> > > convert t1 to dateItems -- format is yyyy,m,d,h,m,s,day no.
> > > put (item 1 of t1) & "-" & f2digits(item 2 of t1) & "-" & f2digits(item 3 of t1) &"T" & word 1 of t3 into t2
> > > put word 2 of t3 into t1 -- the time zone indication
> > > get char 1 of t1 — the code for 0 (zero) is Z, apparently
> > > if it <> "+" and it <> "-“ then
> > > put "Z" after t2
> > > else
> > > put t1 after t2
> > > end if
> > > return t2
> > > end fUTCTime
> > >
> > > function f2digits theNum
> > > -- add a leading zero. We don't check if there are more than two digits
> > > if number of chars of theNum = 1 then
> > > return ("0" & theNum)
> > > else
> > > return theNum
> > > end if
> > > end f2digits
> > >
> > >
> > > > On 7 Nov 2020, at 01:34, Alex Tweedly via use-livecode <use-livecode at lists.runrev.com> wrote:
> > > >
> > > > I don't think it "strips" the TZ info - it simply ignores it. I think the key phrase is in the dictionary as :
> > > >
> > > > > *Note:* The *convert* command assumes all dates / times are in local time except for 'the seconds', which is taken to be universal time.
> > > > >
> > > > So it assume syou date is in local time (regardless of the +0300), and therefore your example returns +0000 for you (I assume you're in the UK, or equivalent, now). It does the same for me, and returns the date with "+0000".
> > > >
> > > > However, the same code run on my LC server (wherever on-rev is these days), changes the +0300 to -0500 - i.e. it's taken as local time where the server is.
> > > >
> > > >
> > > > I assume you should be able to do something with the TimeZone library - but I'm struggling to figure that out.
> > > >
> > > > > local tNow
> > > > > put the seconds into tNow
> > > > > put FromUniversalTime(tNow,"US/Central") into tt
> > > > > put tNow && tt
> > > > > put FromUniversalTime(tNow,"US/Alaska") into tt
> > > > > put CR & tt after msg
> > > > gives me
> > > >
> > > > 1604709030 1604709030
> > > >
> > > > 1604709030
> > > >
> > > > so I don't have a clue what it was trying to do !?!
> > > >
> > > > Alex.
> > > >
> > > > On 06/11/2020 21:28, David Bovill via use-livecode wrote:
> > > > > Why does:
> > > > >
> > > > > get "Fri, 06 Nov 2020 10:57:37 +0300"
> > > > > convert it to internet date
> > > > > put it
> > > > >
> > > > > — give
> > > > > "Fri, 06 Nov 2020 10:57:37 +0000"
> > > > >
> > > > > Just seems to strip the timezone info?
> > > > > On 30 Oct 2020, 21:29 +0000, How to use LiveCode <use-livecode at lists.runrev.com>, wrote:
> > > > > > ToUniversalTime
> > > > > _______________________________________________
> > > > > use-livecode mailing list
> > > > > use-livecode at lists.runrev.com
> > > > > Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> > > > > http://lists.runrev.com/mailman/listinfo/use-livecode
> > > > _______________________________________________
> > > > use-livecode mailing list
> > > > use-livecode at lists.runrev.com
> > > > Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> > > > http://lists.runrev.com/mailman/listinfo/use-livecode
> > >
> > > _______________________________________________
> > > use-livecode mailing list
> > > use-livecode at lists.runrev.com
> > > Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> > > http://lists.runrev.com/mailman/listinfo/use-livecode
> > _______________________________________________
> > use-livecode mailing list
> > use-livecode at lists.runrev.com
> > Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> > http://lists.runrev.com/mailman/listinfo/use-livecode
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode



More information about the use-livecode mailing list