Suchen / SearchNavigation |
UTC-Datum zu Ortszeit und -datum AppleScript20 Jan 2012 - 11:16 date_from_utc » 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.
|
AppleScript Datumsobjekte und -berechnungen |