Lingo Library, Part V (02/2002, Dir 8)

In diesem Bereich befinden sich Artikel und Tutorials zum Thema Director.

Moderatoren: Bär, Admin

Antworten
Admin
Site Admin
Beiträge: 41344
Registriert: 07.02.2006, 2006 16:09
Wohnort: München
Kontaktdaten:

Lingo Library, Part V (02/2002, Dir 8)

Beitrag von Admin » 11.02.2006, 2006 17:39

Lingo Library, Part V - Date Functions

Der fünfte Teil der "Lingo Library" Serie beschäftigt sich mit dem seit Director 8 zur Verfügung stehenden Date() Objekt. Dieses Objekt bietet einige praktische Funktionen, um häufig benötigte Operationen für Datums- oder auch Zeitangaben einfach und schnell zu lösen.

Besonders praktisch bei der Arbeit mit dem Date Objekt ist die Tatsache, dass unabhängig von der Platform und Sprache, stets das gleiche Format verwendet wird. Auf einem englischen, polnischen, oder deutschen System wird dabei stets das gleiche Format verwendet, was insbesondere bei mehrsprachigen Anwendungen von Bedeutung ist.

Das Format des Date() Objekts sieht folgendermaßen aus:

Code: Alles auswählen

date(YYYY, MM, DD)
dabei erkennt das Objekt unterschiedliche Eingabeformate als gültiges Datum:

Code: Alles auswählen

put date(20021224)
-- date( 2002, 12, 24 ) 

put date("20021224")
-- date( 2002, 12, 24 ) 

put date(2002, 12, 24)
-- date( 2002, 12, 24 )
Das Date() Objekt wird u.a. auch zur Erstellung des Systemproperties the systemDate verwendet:

Code: Alles auswählen

put the systemDate
-- date( 2002, 3, 7 ) 
Um auf das Jahr bzw den Monat oder Tag zugreifen zu können, besitzt das Objekt die entsprechenden Properties, die sich einfach abfragen lassen:

Code: Alles auswählen

now = the systemDate 

put now.year
-- 2002 

put now.month
-- 3 

put now.day
-- 7 

put now.minutes
-- ALERT "Property not found" 

put now.seconds
-- 47681

Die getDayTime() Funktion

Code: Alles auswählen

-- -----------------------------
-- return formatted system time
-- -----------------------------
on getDayTime (hDelim, sDelim)
  if voidP(hDelim) then hDelim = ":"
  if voidP(sDelim) then sDelim = "."
  now = the systemDate.seconds
  h = now / 60 / 60 mod 60
  if h < 10 then h = "0" & h
  m = now / 60 mod 60
  if m < 10 then m = "0" & m
  s = now mod 60
  if s < 10 then s = "0" & s
  return string(h & hDelim & m & sDelim & s)
end getDayTime
Diese Funktion gibt die aktuelle Uhzeit im Format HH:MM:SS zurück, wobei ein eigenes Trennzeichen für die Stunden und Sekunden angegeben werden kann.
Bei der Berechnung wird das seconds Property abgefragt und einfach in die entsprechenden Stunden, Minuten und Sekunden unterteilt.

Es gibt allerdings eine Alternative zu dieser Funktion, die noch etwas schneller ist:

Code: Alles auswählen

-- -----------------------------
-- return formatted system time
-- -----------------------------
on getDayTime2 (hDelim, sDelim)
  now = framesToHMS(the systemDate.seconds, 60, FALSE, FALSE)
  saveDelim = the itemDelimiter
  the itemDelimiter = ":"
  delete now.item[1]
  the itemDelimiter = saveDelim
  return now
end getDayTime2
Dabei wird die interne framesToHMS Funktion verwendet, die eigentlich zum Bereich Score Recording gehört und Anzahl Frames bei einem gegebenen Frame Tempo in Stunden, Minuten und Sekunden umrechnet. Wir können also diese interne Funktion nutzen, um die Sekunden mit Angabe eines fiktiven Frame Tempos von 60 Frames pro Minute (also in unserem Fall 60 Sekunden pro Minute) in die aktuelle Zeit umrechnen zu lassen

Beispiel:

Code: Alles auswählen

put getDayTime(":", ".")
-- "13:31.19" 

put getDayTime2()
-- "13:31.19 " 

Die getWeekDay() Funktion

Code: Alles auswählen

-- -----------------------------
-- return day of the week
-- -----------------------------
on getWeekDay (myDate)
  if ilk(myDate) <> #date then myDate = the systemDate
  dayNum = (myDate - date(1,1,1)) mod 7
  days = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
  return days[dayNum + 1]
end getWeekDay
Diese Funktion gibt den Wochentag für ein beliebiges Datum zurück.
Dabei wird die Eigenschaft des Date() Objekts verwendet Daten zu subtrahieren. Vom angegebenen Datum wird einfach der erste Tage der Zeitrechnung abgezogen, was die Anzahl der bisher vergangenen Tage ergibt. Anschließend wird per Modulus Berechnung der numerische Wochentag errechnet und aus der Liste der Wochentage der Name des Wochentages zurückgegeben.

Beispiel:

Code: Alles auswählen

put getWeekDay(date(20021224))
-- "Dienstag"

Die getDayOfYear() Funktion

Code: Alles auswählen

-- -----------------------------
-- return day of the year
-- -----------------------------
on getDayOfYear (myDate)
  if ilk(myDate) <> #date then myDate = the systemDate
  return myDate - date(myDate.year-1, 12, 31)
end getDayOfYear
Diese Funktion errechnet den numerischen Tag eines beliebigen Datums innerhalb des jeweiligen Jahres. Dabei wird wieder die Eigenschaft des Date() Objekts verwendet Daten zu subtrahieren, in diesem Fall vom letzten Tag des vorhergehendes Jahres.

Beispiel:

Code: Alles auswählen

put getDayOfYear(the systemDate)
-- 66

Die getWeekOfYear() Funktion

Code: Alles auswählen

-- -----------------------------
-- return week of the year
-- -----------------------------
on getWeekOfYear (myDate)
  if ilk(myDate) <> #date then myDate = the systemDate
  return getDayOfYear(myDate) / 7 mod 52
end getWeekOfYear
Diese Funktion errechnet die Kalenderwoche eines beliebigen Datums innerhalb des jeweiligen Jahres. Dabei wird wieder die getDayOfYear() Funktion eingesetzt um zunächst den Tag des Jahres und anschließend die daraus resultierende Kalenderwoche zu errechnen.

Beispiel:

Code: Alles auswählen

put getWeekOfYear(the systemDate)
-- 9

Fazit

Das Date() Objekt ermöglicht es ohne großen Aufwand viele praktische Funktionen zu erstellen, die in einer Unzahl von Projekten benötigt werden, sei es um Logfiles zu schreiben, Trailversionen ablaufen zu lassen, oder auch einfach einen Kalender anzuzeigen.

In jedem Fall lohnt es sich ein bisschen mit diesem Feature zu experimentieren, und die Library selbst um weitere Funktionen zu erweitern. In Kombination mit einen Timeout Objekt lässt sich z.B. sehr einfach eine sehr genau gehende und auf jedem System gleich funktionierende Uhr erstellen.

Download Lingo-Lib Date Functions: upload/lingo-lib-V.zip


Autor: Martin Kloss

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast