date_from_utc
»date_from_utc« ist die Umkehrung von »date_to_utc«: Der Handler nimmt ein AppleScript-Datum oder eine Liste von Daten, die als Universal Time Coordinated (Greenwich Mean Time) interpretiert werden und liefert sie als AppleScript Datum in der Ortszeit des Mac zurück.
Der Handler benutzt System Events und dessen Art, AppleScript-Daten von und zu Property Listen zu wandeln. Die Datumsobjekte werden in einen ISO-Textausdruck gewandelt und eine Property List daraus erzeugt. System Events erzeugt daraus AppleScript-Datumsobjekte. Dies wendet die Zeitzonenumwandlung entsprechend der Olson-Zeitzone Ihres Mac an.
on date_from_utc(list_arg)
-- Ändert den Wert eines Datums oder einer Liste von Daten
-- die als Universal Time Coordinated Zeit gegeben sind,
-- in Ortszeit
-- Argument kann ein Datum oder eine Liste von Daten sein.
-- Resultat für ein Datum ist ein Datum,
-- Resultat für eine Liste ist eine Liste.
set type_is_list to true
if class of list_arg is not list then
set list_arg to {list_arg}
set type_is_list to false
end if
set string_lines to {}
repeat with J from 1 to count list_arg
set curr to item J of list_arg
-- Prüfung auf richtigen Typ. Alles muss Datum sein
if class of curr is not date then
error "Non-date value in date_from_utc." number 1700
end if
-- Properties aus Datum herausziehen und für richtigen
-- Textlänge vorbereiten
set v_list to ¬
{(year of curr) + 10000, ¬
(month of curr) + 100, ¬
(day of curr) + 100, ¬
(hours of curr) + 100, ¬
(minutes of curr) + 100, ¬
(seconds of curr) + 100}
-- zu Text wandeln, zweiter bis letzter Buchstabe.
repeat with JI from 1 to count v_list
set (item JI of v_list) to text 2 thru -1 of ((item JI of v_list) as text)
end repeat
set {y, m, d, h, min, s} to v_list
-- Zeilen für Property List aufbauen
copy ("<date>" & y & "-" & m & "-" & d & "T" & h & ":" & min & ":" & s & "Z</date>") to end of string_lines
end repeat
-- alle erzeugten Zeilen für Property List verbinden
set old_delims to AppleScript's text item delimiters
set AppleScript's text item delimiters to return
set value_string to string_lines as text
set AppleScript's text item delimiters to old_delims
-- Property List erzeugen
set plist_string to "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
<plist version=\"1.0\">
<array>
" & value_string & "
</array>
</plist>
"
-- zu Liste von Daten umwandeln
tell application "System Events"
set plist to (make new property list item with properties {text:plist_string})
set r to value of plist
end tell
-- erstes Element nehmen, wenn Argument im Aufruf keine Liste war.
if not type_is_list then
set r to item 1 of r
end if
return r
end date_from_utc
Beispiele (mein Mac stand auf australischen Formateinstellungen und der Zeitzone »Australia/Melbourne« für den Test):
date_from_utc({date "Monday, 2 January 2012 1:00:00 PM", date "Wednesday, 16 May 2012 1:00:00 PM", date "Friday, 2 January 1970 1:00:00 PM"})
liefert
{date "Tuesday, 3 January 2012 12:00:00 AM", date "Wednesday, 16 May 2012 11:00:00 PM", date "Friday, 2 January 1970 11:00:00 PM"}
Alle Eingabedaten benutzen 13:00 UTC. Beachten Sie die verschiedenen Ergebnisse in Sommer und Winder und in verschiedenen Jahren für den Sommer.