Fischer-Bayern.de
Letztes Update: 07.06.2003 | 12:39:10 Uhr
Datumsfunktionen 
Peter Fischer

Wir haben gesehen, wie man die einzelnen "Bestandteile" aus einem Datum verwertet. Das funktioniert nicht nur mit dem aktuellen Datum (current date), sondern mit jedem beliebigen Datum.

set dasDatum to date "04.10.2000"

würde uns eine komplette Datumsangabe liefern. Die fehlenden Daten werden dabei von AppleScript ergänzt.

Ergebnis:
date "Mittwoch, 4. Oktober 2000 0:00:00 Uhr"

Als Uhrzeit wird, wie man sieht, 0:00:00 Uhr eingesetzt.

Nächster Versuch:
set dasDatum to date "04.10."

Ergebnis:
date "Mittwoch, 4. Oktober 2000 0:00:00 Uhr"

Versuch Nr. 3:
set dasDatum to date "04.10. 0:00:00 Uhr"

liefert uns das gleiche Ergebnis. Sogar die "brutale" Variante

set dasDatum to date "04.0:00:00"

gibt das selbe Ergebnis zurück.

Nun aber zur Praxis. Anlaß des Artikels war folgende Aufgabe:

Per Skript sollen mehrere Ordner erstellt werden, die als Ordnernamen das Datum in folgender Form tragen:

02.10.00 Montag
03.10.00 Dienstag
usw.

Wir wollen uns deshalb mit dem Teil des Skripts befassen, der diese Ordnernamen erzeugt.

Wie muß so ein Skript aussehen? Wir brauchen auf jeden Fall eine Schleife, die mit jedem Durchlauf einen neuen Ordner anlegt und diesen entsprechend benennt.

Die Anzahl der Wiederholungen muß festgelegt werden. In unserem Beispiel am besten in einer Variablen. Man könnte zu Beginn des Skripts einen Abfrage-Dialog einbauen und dessen Wert dann der Variablen zuweisen.

Zur Vereinfachung schreiben wir hier nur:

set x to 7 -- die Schleife wird also 7 mal ausgeführt.

Desweiteren brauchen wir eine Funktion, die das Anfangsdatum um jeweils 1 erhöht.

Dafür benötigen wir eine Zählvariable, die wir am besten am Anfang des Skripts definieren:

set z to 0

Um den Wert dieser Variablen werden wir versuchen, das Datum zu "erhöhen".

Das macht uns folgendes klar: Gegen Ende des Schleifen-Durchlaufs muß die Zählvariable z um 1 erhöht werden.

set z to z + 1

Zuerst dachte ich an eine Lösung, die den Tag als Zahl extrahiert und dann die Variable z dazu zählt. Mit dem Tag als Text kann man nicht rechnen. Die Umwandlung zum Text müßte dann danach erfolgen.

Erste Versuche führten dann auch gleich zum erwünschten Ergebnis. Erst als ich probierte mehr Ordner-Namen zu erstellen (über das Monatsende hinaus), zeigte sich der Fehler in der Überlegung. Zu einer Zahl kann man immer mehr dazu rechnen (31 + 1 = 32), als Datum ist das dann allerdings nicht mehr zu gebrauchen.

Allerdings hatte ich schon Versuche gemacht zum Datum etwas zu addieren.

set dasDatum to (current date) + 1

So wird aber zum aktuellen Datum nur 1 Sekunde hinzu gerechnet.

+ 1 day führte nur zu einer Fehlermeldung.

Es geht aber doch!

AppleScript sieht durchaus die Konstanten "days" und "weeks" vor. Womit man einfach nicht so leicht rechnet ist der Punkt, daß dies keine Konstanten in Bezug auf ein Datum sind, sondern Zeit-Konstanten.

Zeit wird in AppleScript mit Sekunden berechnet. Es gibt folgende Konstanten, die einfach die Lesbarkeit erleichtern sollen:

  • minutes -- 60 (Sekunden pro Minute)
  • hours -- 60 * Minuten (oder 3600 Sek.)
  • days -- 24 * Stunden (oder 86.400 Sek.)
  • weeks -- 7 * Tage (oder 604.800 Sek.)

Für unser Vorhaben gilt deshalb: Um einen Tag dazu zu rechnen, müssen wir 1 mal 86.400 Sekunden addieren.

set dasDatum to (dasDatum + z * days) -- daran denken, days ist nur eine andere Bezeichnung für 86400 Sek.



Nun aber zum Skript:
set z to 0

set x to 7
repeat x times set dasDatum to current date -- schreibt das aktuelle Datum und Uhrzeit -- in die Variable dasDatum set dasDatum to (dasDatum + z * days) set derTag to text -2 thru -1 of ("0" & dasDatum's day) -- extrahiert den Tag aus dasDatum
-- Monat als Zahl
set MonatsListe to {January, February, March, ¬ April, May, June, July, August, ¬ September, October, November, December}
repeat with i from 1 to 12 if dasDatum's month = item i of MonatsListe then set Monat to text -2 thru -1 of ("0" & i) exit repeat -- wenn true, wird die Schleife verlassen end if end repeat

set z to z + 1 set Jahr to ((year of dasDatum) as text) set Datum_kurz to derTag & "." & Monat & "." & Jahr set WTag to word 1 of (dasDatum as text)
set Jahr_kurz to ¬ the characters 3 thru 4 in ((year of dasDatum) as text) -- extrahiert das Jahr aus dasDatum
set Fertiges_Datum to ¬ derTag & "." & Monat & "." & Jahr_kurz & " " & WTag -- fügt die extrahierten Daten zu einem Datum zusammen
tell application "Finder" if not (exists folder Fertiges_Datum) then set neuerOrdner to (make new folder at desktop) set name of neuerOrdner to Fertiges_Datum end if end tell
end repeat set z to 0 -- die Zählvariable wird wieder zurück gesetzt.


Nun wünsche ich viel Spaß beim Ausprobieren.

Anmerkung: Den letzten Teil des Skripts, der sich an den Finder wendet, habe ich am 22.05.2002 geändert, da das simple Beispiel, das vorher im Skript benutzt wurde, unter OS X zu einem Fehler geführt hatte.

Herzlichen Dank an Daisy und Matthias aus dem Forum.


Peter Fischer



 

 

Workshop



snow@fischer-bayern.de

Ebene 1