Grammatik für Timedomain-Werte (Januar 2011)

  • Ist mit den Beispielen aus dem Wiki (bis auf obligatorische Tages und Zeitangaben) verträglich.
  • Deckt alle bereits erfassten Werte (soweit überhaupt formalisierbar) ab.
  • Die sehr häufigen ergänzenden Bemerkungen werden als "…"-Kommentar abgebildet.
  • Ist hinreichend einfach™ auszuwerten.

Erklärung zur Schreibweise:

  • | kennzeichnet Alternativen.
  • [ und ] markieren optionale Komponenten.
  • { und } markieren optionale auch mehrfache Wiederholung.
  • Mehrere Produktionen zu einem Symbol bezeichnen Alternativen.
Symbol Definition Kommentar
time_domain
<time_domain> <alternative> { ## <alternative> } [1]
<alternative> <rule_sequence> { ; <rule_sequence> }
<rule_sequence> [ <days> : ] <rule> { ; <rule> } [2]
Basic rule
<rule> <times_for_days> { , <times_for_days> } [3]
24/7     ← identisch mit →     daily 00:00-24:00 → open
<times_for_days> <days> <times> → open
<days> <times> open [ <comment> ]
<days> <times> closed [ <comment> ] → closed
<days> <times> unknown [ <comment> ] → unknown
<days> <times> <comment>
<days> off exception
Days
<days> <selection> { <selection> } and
<selection> <day_set> {, [!] <day_set> } or
<day_set> daily
<fixed_date> [4]
<fixed_date> +
<fixed_date> - <fixed_date>
<yearly_date> [5]
<yearly_date> - <yearly_date>
<month> [6]
<month> - <month>
<monthly_date> [7] [8]
<monthly_date> - <monthly_date>
<monthly_date> - <monthly_date> / <number>
<day_of_week> [9]
<day_of_week> - <day_of_week>
<day_of_week> [ <week_of_month> { , <week_of_month> } ]
week <week_of_year> [8]
week <week_of_year> - <week_of_year>
week <week_of_year> - <week_of_year> / <number>
<holiday> [ ± <number> days ]
<fixed_date> <dd_mm_yyyy>
<yearly_date> <month> <number> [10] [11]
<month> <number> ± <day_of_week>
<month> <number> ± <day_of_week> ± <number> days
<day_of_week> [ <month> <week_of_month> ]
<day_of_week> [ <month> <week_of_month> ] ± <number> days
<variable_date>
<variable_date> ± <number> days
<variable_date> easter | …
<monthly_date> <day_of_month> [10]
<day_of_month> ± <day_of_week>
<day_of_week> [ <week_of_month> ]
<day_of_week> [ <week_of_month> ] ± <number> days
<week_of_month> 1 | 2 | 3 | 4 | 5 | - 1 | - 2 | - 3 | - 4 | - 5
<holiday> BH | PH | SH
Times
<times> <timespan> { , <timespan> } or
<timespan> <time>
<time> + [12]
<time> - <time>
<time> - <time> +
<time> - <time> / <minute> [13]
<time> - <time> / <hour_minutes>
<time> <hour_minutes> | <variable_time>
<variable_time> <event>
<event> + <hour_minutes> hours
<event> - <hour_minutes> hours
<event> sunrise | sunset | …
Basic elements
<hour_minutes> HH:MM HH∊{0..24}
MM∊{0…59}
<dd> DD. DD∊{1..31}
MM∊{1…12}
YYYY≥2000
<dd_mm> DD.MM.
<dd_mm_yyyy> DD.MM.YYYY
YYYY-MM-DD
<week_of_year> WW WW∊{1..53}
<day_of_week> Su | Mo | Tu | We | Th | Fr | Sa
<month> Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec
<comment> " … Zeichen außer ""
  1. Die Gruppen werden von links nach rechts ausgewertet, bis eine Gruppe open als Ergebnis liefert.

    In der Diskussion wurde ! als Nicht-Operator vorgeschlagen; gemeint war aber offensichtlich ein Kurzschluß-Oder. Ich hatte versuchsweise das || eingeführt: das bindet aber in den üblichen Programmiersprachen stärker als das ; und führt in die Irre. Das ## beseitigt diesen Nachteil.

  2. Eine rule ist entweder ganz für einen Tag zuständig oder gar nicht. Das Ergebnis einer rule_sequenz ist das Ergebnis der letzten Rule, die für den gegebenen Tag zuständig ist.
  3. Die Komponenten einer rule sind kooperativ: das Komma zwischen den Komponenten steht für und außerdem.
  4. Die Schreibweise mit + steht für bis auf weiteres: die Gültigkeit beginnt am angegebenen Tag und gilt bis auf weiteres.
  5. Yearwrap: wenn die zweite Zeitangabe vor der ersten liegt, erstreckt sich das Zeitintervall ins nächste Jahr.
  6. Yearwrap: wenn der zweite Monat vor der dem ersten liegt, erstreckt sich das Zeitintervall ins nächste Jahr.
  7. Monthwrap: wenn die zweite Zeitangabe vor der ersten liegt, erstreckt sich das Zeitintervall in den nächsten Monat.
  8. Die Schreibweise mit /ist an die crontab angelehnt und erlaubt Ausdrücke wie in geraden Wochen oder an ungeraden Tagen.
  9. Su steht für alle Sonntage, Su[1] steht für den ersten Sonntag jedes Monats, Su[-1] steht für den letzten Sonntag jedes Monats.
  10. Gegeben sei ein Kalendertag. Mit der Schreibweise + Su wird der erste Sonntag nach dem gegebenen Kalendertag bezeichnet. Mit der Schreibweise - Su wird der späteste Sonntag vor dem gegebenen Kalendertag bezeichnet.
  11. Diese Schreibweise wird zur Spezifikation der Sommerzeit benötigt: Su[Mar -1] steht für den letzten Sonntag im März.
  12. Open end: die Öffnungszeit beginnt am angegebenen Zeitpunkt, das Ende ist nicht angegeben. Diese Angaben sind in der Praxis häufig; aber natürlich lässt sich nicht automatisiert feststellen, ob zu einem bestimmten Zeitpunkt geöffnet sein wird. Ich interpretiere diese Schreibweise als plus 4 Stunden, aber längstens bis Mitternacht.
  13. Dieser Schreibweise definiert einen Takt: 10:00-16:00/90 und 10:00-16:00/1:30 stehen für von zehn bis vier alle 1½ Stunden. Damit lassen sich insbesonders Abfahrtszeiten kompakt und übersichtlich ausdrücken. Bei Öffnungszeiten wird der Takt ignoriert.