Thank you Matthias. Those detailed instructions will come in handy for me - when/if I get that far.

The problem I mentioned a couple of emails ago in this thread was in the IDE - haven\t yet got as far as doing it on the server.

I tested out the TimeZone library with a couple of randomly chosen timezones - and they all came back incorrect (i.e. unchanged from UTC even though the timezones should have been different). I know that if you pass in a timezone that is not in the local machine's database, it will silently return the UTC value - but that's not the case here.

I've now looked at it more closely - some of these timezones give the right answer, some give the wrong answer - though they are all in the TimeZones() list.

All on my MacBook Pro, OSX 10.13.6, LC 9.6 ...

   local tTimeZones, tAllTheTimeZones
   put timezones() into tAllTheTimeZones
   put "UTC" & CR after tTimeZones
   put "America/New_York" & CR after tTimeZones
   put "America/Anchorage" & CR after tTimeZones
   put "junktotest" & CR after tTimeZones
   put "US/Central" & CR after tTimeZones
   put "US/Alaska" & CR after tTimeZones

   repeat for each line L in tTimeZones
      if L is among the lines of tAllTheTimeZones then
         put L && FromUniversalTime(the seconds,L) &CR after msg
      else
         put L && "is not in the database" &CR after msg
      end if
   end repeat
gives

UTC 1604762435
America/New_York 1604744435
America/Anchorage 1604730035
junktotest is not in the database
US/Central 1604762435
US/Alaska 1604762435

Note the last two (which happened to be the ones I chose in my earlier test) wrongly show the UTC time, though they are clearly in the TimeZones() list.

Maybe just a bug and I should report it ?

Alex

On 07/11/2020 14:36, matthias rebbe via use-livecode 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@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@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@lists.runrev.com>, wrote:
ToUniversalTime
_______________________________________________
use-livecode mailing list
use-livecode@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@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@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@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@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@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to