time to gmt

But of course, using my handler:

on TZtoTZ(TZ1date, TZ1, TZ2)
	return (do shell script ("eraTime=$(TZ=" & TZ1 & " date -jf '%Y-%m-%dT%H:%M:%S' '" & (TZ1date as «class isot» as string) & "' '+%s') ; TZ=" & TZ2 & " date -r  \"$eraTime\" '+%Y-%m-%dT%H:%M:%S'") as «class isot») as date
end TZtoTZ

set dt1 to date ("26.10.2013 12:00")
set dt2 to date ("27.10.2013 12:00")

(TZtoTZ(dt2, "Europe/Berlin", "GMT") - TZtoTZ(dt1, "Europe/Berlin", "GMT")) / hours --> 25.0

Now, if they ever remove class isot, we’ll have to turn up in Cupertino. :slight_smile: And send an invoice later of course. :smiley:

Nice handler Nigel!

Or a slightly more useful ‘time to GMT’ function:

on TZtoTZ(TZ1date, TZ1, TZ2)
	return (do shell script ("eraTime=$(TZ=" & TZ1 & " date -jf '%Y-%m-%dT%H:%M:%S' '" & (TZ1date as «class isot» as string) & "' '+%s') ; TZ=" & TZ2 & " date -r  \"$eraTime\" '+%Y-%m-%dT%H:%M:%S'") as «class isot») as date
end TZtoTZ

on timeToGMT on dt for TZ
	return dt - TZtoTZ(dt, TZ, "GMT")
end timeToGMT

set dt1 to date ("26.10.2013 12:00")
set localTZ to (do shell script ("readlink '/etc/localtime' | sed 's|/usr/share/zoneinfo/||'"))
timeToGMT on dt1 for localTZ

Hi Nigel,

When I run your script:

on TZtoTZ(TZ1date, TZ1, TZ2)
	return (do shell script ("eraTime=$(TZ=" & TZ1 & " date -jf '%Y-%m-%dT%H:%M:%S' '" & (TZ1date as «class isot» as string) & "' '+%s') ; TZ=" & TZ2 & " date -r  \"$eraTime\" '+%Y-%m-%dT%H:%M:%S'") as «class isot») as date
end TZtoTZ

set dt1 to date ("10/26/2013 12:00")
set dt2 to date ("10/27/2013 12:00")

(TZtoTZ(dt2, "Europe/Berlin", "GMT") - TZtoTZ(dt1, "Europe/Berlin", "GMT")) / hours --> 25.0

I get -24. Did I miss something?

That’s ok. I see it is relative to your computer’s settings (where you are).

Possibly your computer’s set for a 12-hour clock and “12:00” is being compiled as midnight instead of midday.

Hi Nigel,

Setting System Preferences to 24 hour clock didn’t make it work, but adding PM to the times did work.

on TZtoTZ(TZ1date, TZ1, TZ2)
	return (do shell script ("eraTime=$(TZ=" & TZ1 & " date -jf '%Y-%m-%dT%H:%M:%S' '" & (TZ1date as «class isot» as string) & "' '+%s') ; TZ=" & TZ2 & " date -r  \"$eraTime\" '+%Y-%m-%dT%H:%M:%S'") as «class isot») as date
end TZtoTZ

set dt1 to date ("10/26/2013 12:00 PM")
set dt2 to date ("10/27/2013 12:00 PM")

(TZtoTZ(dt2, "Europe/Berlin", "GMT") - TZtoTZ(dt1, "Europe/Berlin", "GMT")) / hours --> 25.0

Where do you get the locations from like “Europe/Berlin”?

Thanks,
kel

That’s alright, I need to see ‘environ’.

Thanks,
kel

the 12/24 hour setting in Date & Time is just the display mode,
the system locale settings are located in Language & Text > Region

In this particular case, I just used “Europe/Berlin” because that’s what juergen said was his time zone in post #6. One way to get the time zone on the local computer is, as in post #16, to parse the POSIX path pointed to by the symbolic link “/etc/localtime”:

set localTZ to (do shell script ("readlink '/etc/localtime' | sed 's|/usr/share/zoneinfo/||'"))

This was interesting, I started to dig a little into the zoneinfo files that lies below /usr/share.

When I use the command zdump zoneinfo/US/Hawaii I get the current time back, according to the manual, in utc. So, they don’t do much useful, the commands to read tzone files from the shell. I think you’ll have to set the LC_TZ to something for their usefullness to kick in.

I was hoping to get the offset or something, instead I ended up with the knowledge that leap seconds aren’t included in posix time (seconds since epoch.) :confused: (man time2posix)

What you’re seeing is correct; you’re just not looking at the full picture. Change your script to this:

set dt1 to date ("26.10.2013 12:00")
set dt2 to date ("27.10.2013 12:00")
log dt1
log dt2

(dt2 - dt1) / hours 

Now go to System Preferences, Language & Text, and change the Medium format for time display so that it also includes the timezone. Run the script and look at the logged values. You might now agree with AppleScript :wink:

If you want to do much with AS dates, the key is to ignore the string value, and just deal with the underlying components.

Hello everybody,

I found a pretty good list here:

http://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/timezone.html

Here’s a better list that contains the daylight savings times offset:

https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

It’s better to use the same list as the mac does, that is the IANA Time Zone Database. Here you can download the plain text versions of the files that are serialized in /usr/share/zoneinfo. When downloading these plain text files you can look into these files and see the history of time settings.

I’ll just add to what is written above: I believe there is a way to decompile the zoneinfo files. but zdump gives you some output, zdump -v exactly what DJ Bazzie Wazzie said. You should get further pointers by looking at man zdump.

As a user, the most usage you have of the zone-info database is the timezone names really, and you’ll use those to set the TZ variable with them, then use the date to see the new time. Perfect for making a world clock with AppleScript. Berlin London Paris New York Tokoyo. :slight_smile:

To utilize, and have fun with the different timezones, then have a look at this page.

You should also have a thourough look at man date,I believe the %F format to be the «class Isot» counterpart in AppleScript.

It’s equivalent to the “yyyy-mm-dd” part. The time part can be obtained with “%T”. So in my TZtoTZ handler, “%Y-%m-%dT%H:%M:%S” can be reduced to “%FT%T”. Thanks for the heads-up! :slight_smile:

The formatting is actually done by strftime.

on TZtoTZ(TZ1date, TZ1, TZ2)
	return (do shell script ("eraTime=$(TZ=" & TZ1 & " date -jf '%FT%T' '" & (TZ1date as «class isot» as string) & "' '+%s') ; TZ=" & TZ2 & " date -r  \"$eraTime\" '+%FT%T'") as «class isot») as date
end TZtoTZ

Hi DJ Bazzie Wazzie,

Great site. It looks like everything is in there. Interesting files:

I agree. People can adjust to getting up when the sunrises without any help. :slight_smile:

Thanks,
kel

Hi McUsr,

I’ve been searching through unix for info, but haven’t checked out dump yet.

I was thinking exactly about making a world clock along with timers, etc. Great minds. :slight_smile:

Nice shortcut with the %F. It makes Nigels script more readable also.

Thanks,
kel

Off Topic.

Time has always been a nuisance, just ask the slave serving under the tyrant of scicily, when said tyrant, moved the time stone higher up, for getting more daylight on it, and hence prolong the working hours.

And the watch makers of Florence, who got their eyes stabbed out by angry factory workers that suddenly, had to follow the clock, and abandon daylight governing the length of their workday. But, the utilization of the clock, made Florence the most productive creator of fabrics from the weaveries, and made her prosper.

Our problems seems meagre. :slight_smile: (Especially with Nigel’s handlers.)

It is good to be usefull at times. :slight_smile: