- 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 "… " |
- Die Gruppen werden von links nach rechts ausgewertet,
bis eine Gruppe
open
als Ergebnis liefert.In der Diskussion wurde
!
alsNicht
-Operator vorgeschlagen; gemeint war aber offensichtlich einKurzschluß-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. - Eine
rule
ist entweder ganz für einen Tag zuständig oder gar nicht. Das Ergebnis einerrule_sequenz
ist das Ergebnis der letzten Rule, die für den gegebenen Tag zuständig ist. - Die Komponenten einer
rule
sind kooperativ: das Komma zwischen den Komponenten steht fürund außerdem
. - Die Schreibweise mit
+
steht fürbis auf weiteres
: die Gültigkeit beginnt am angegebenen Tag und gilt bis auf weiteres. Yearwrap
: wenn die zweite Zeitangabe vor der ersten liegt, erstreckt sich das Zeitintervall ins nächste Jahr.Yearwrap
: wenn der zweite Monat vor der dem ersten liegt, erstreckt sich das Zeitintervall ins nächste Jahr.Monthwrap
: wenn die zweite Zeitangabe vor der ersten liegt, erstreckt sich das Zeitintervall in den nächsten Monat.- Die Schreibweise mit
/
ist an diecrontab
angelehnt und erlaubt Ausdrücke wiein geraden Wochen
oderan ungeraden Tagen
.
steht für alle Sonntage,Su
steht für den ersten Sonntag jedes Monats,Su[1]
steht für den letzten Sonntag jedes Monats.Su[-1]
- Gegeben sei ein Kalendertag. Mit der Schreibweise
wird der erste Sonntag nach dem gegebenen Kalendertag bezeichnet. Mit der Schreibweise+ Su
wird der späteste Sonntag vor dem gegebenen Kalendertag bezeichnet.- Su
- Diese Schreibweise wird zur Spezifikation der Sommerzeit benötigt:
Su[Mar -1]
steht für den letzten Sonntag im März. 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 alsplus 4 Stunden, aber längstens bis Mitternacht
.- Dieser Schreibweise definiert einen Takt:
und10:00-16:00/90
stehen für10:00-16:00/1:30
von zehn bis vier alle 1½ Stunden
. Damit lassen sich insbesonders Abfahrtszeiten kompakt und übersichtlich ausdrücken. Bei Öffnungszeiten wird der Takt ignoriert.