- Ist mit den Beispielen aus dem Wiki (bis auf die obligatorische Zeit) 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}
markiert optionale auch mehrfache Wiederholung.- Mehrere Produktionen zu einem Symbol bezeichnen Alternativen.
Symbol | Definition | Kommentar |
---|---|---|
time_domain |
||
<time_domain> | 24/7 |
→ open |
<fallback_group>
{ ||<fallback_group> } |
[1] | |
<fallback_group> | <rule_sequence>
{ ;<rule_sequence> } |
|
<rule_sequence> |
[ <calendar_ranges> :] <basic_rule> { ;<basic_rule> } |
[2] |
Basic rule |
||
<basic_rule> | <times_for_days> { ,<times_for_days> } |
[3] |
<times_for_days> | open[ <comment> ] |
→ open |
closed[ <comment> ] |
→ closed | |
unknown[ <comment> ] |
→ unknown | |
<comment> | ||
<day_list> off |
→ closed | |
[ <day_list> ] <times> | → open | |
[
<day_list>
]
<times> open[ <comment> ] |
||
[
<day_list>
]
<times> closed[ <comment> ] |
→ closed | |
[
<day_list>
]
<times> unknown[ <comment> ] |
→ unknown | |
[ <day_list> ] <times> <comment> | ||
Days |
||
<day_list> | <day_or_days> { ,<day_or_days> } |
or |
<day_or_days> | [ <weeks> ] { <holiday> } <days> | |
[ <weeks> ]
{ <holiday> } <holiday> [ ±<number> days] |
||
<holiday> | SH| PH |
|
<days> | <wday> | [4] |
<wday> -<wday> |
||
<wday> [<nth_entry> { ,<nth_entry> } ] |
||
<mday> | ||
<mday> -<mday> |
||
<mday> -<mday> /<number> |
[5] | |
<nth_entry> | <nth> | |
<nth> -<nth> |
||
-<nth> |
||
<nth> | 1| 2| 3| 4| 5 |
|
<weeks> | week<week> { ,<week> } |
or |
<week> | <weeknum> | |
<weeknum> -<weeknum> |
||
<weeknum> -<weeknum> /<number> |
[5] | |
Times |
||
<times> | <timespan> { ,<timespan> } |
or |
<timespan> | <time> | |
<time> + |
[6] | |
<time> -<time> |
[7] | |
<time> -<time> + |
||
<time> -<time> /<minute> |
[8] | |
<time> -<time> /<hour_minutes> |
||
<time> | <hour_minutes> | <variable_time> | |
<variable_time> | <event> | |
<event> +<hour_minutes> hours |
||
<event> -<hour_minutes> hours |
||
<event> | sunrise| sunset| … |
|
Calendar |
||
<calendar_ranges> | <calendar_days> { ,<calendar_days> } |
or |
<comment> | [9] | |
<calendar_days> | [ <year> ] <month> | |
[ <year> ] <month> -<month> |
||
[ <year> ] summer |
[10] | |
[ <year> ] winter |
||
<date_with_offsets> | [11] | |
<date_with_offsets> + |
[12] | |
<date_with_offsets> -<date_with_offsets> |
[13] | |
<date_with_offsets> | <date> [ ±<wday> ] [ ±<number> days] |
[14] |
<date> | [ <year> ] <month> <daynum> | |
[ <year> ] <month> <wday> [[ -] <nth> ] |
||
[ <year> ] <variable_date> | ||
<daynum> | [15] | |
<variable_date> | easter| … |
|
Basic elements | ||
<wday> | Su| Mo| Tu| We| Th| Fr| Sa |
|
<weeknum> | 01| 02| 03| 04| 05| 06| 07| 08| 09| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 30| 31| 32| 33| 34| 35| 36| 37| 38| 39| 40| 41| 42| 43| 44| 45| 46| 47| 48| 49| 50| 51| 52| 53 |
|
<month> | Jan| Feb| Mar| Apr| May| Jun| Jul| Aug| Sep| Oct| Nov| Dec |
|
<daynum> | 01| 02| 03| 04| 05| 06| 07| 08| 09| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 30| 31 |
|
<mday> | 01.| 02.| 03.| 04.| 05.| 06.| 07.| 08.| 09.| 10.| 11.| 12.| 13.| 14.| 15.| 16.| 17.| 18.| 19.| 20.| 21.| 22.| 23.| 24.| 25.| 26.| 27.| 28.| 29.| 30.| 31. |
|
<hour_minutes> | <hour>:<minute> |
|
<hour> | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20| 21| 22| 23| 24 |
|
<minute> | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 30| 31| 32| 33| 34| 35| 36| 37| 38| 39| 40| 41| 42| 43| 44| 45| 46| 47| 48| 49| 50| 51| 52| 53| 54| 55| 56| 57| 58| 59| 60 |
|
<comment> | "{Zeichen außer "und ;} " |
- 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 habe versuchsweise das||
eingeführt: man tippt es nicht "aus Versehen", es zeigt typografisch sehr gut die Zäsur, und jeder Programmierer versteht die Bedeutung sofort. - Eine
basic_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
basic_rule
sind kooperativ: das Komma zwischen den Komponenten steht fürund außerdem
.
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]
- Diese Schreibweise ist an die
crontab
angelehnt und erlaubt Ausdrücke wiein geraden Wochen
oderan ungeraden Tagen
. 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
.- Wenn die zweite Zeitangabe vor der ersten liegt,
so gilt sie für den folgenden Tag.
Die Bedingung ist true, wenn erste Zeitangabe ≤ zu prüfende Zeit < zweite Zeitangabe gilt. - 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. - Manchmal kann man den Öffnungszeitraum (noch) nicht formal spezifizieren.
Dann nimmt ein von einem:
gefolgter Kommentar die textuelle Beschreibung auf. - Sehr oft wird bei Öffungszeiten zwischen Winter und Sommer unterschieden.
Das werden mit den Pseudotagesbereichen
summer
undwinter
codiert:summer
wird ausgewertet zu Mai–Oktober,winter
zu November–April. - Wenn das zu prüfende Datum mit dem angegebenen Tag übereinstimmt, true, sonst false.
Bis auf weiteres
: die Gültigkeit beginnt am angegebenen Tag und gilt bis auf weiteres.- Wenn von-Tag ≤ zu prüfendes Datum ≤ bis-Tag
gilt, ist das Ergebnis true.
Wenn von-Tag > bis-Tag und außerdem das zu prüfende Datum ≤ von-Tag oder zu prüfendes Datum ≧ bis-Tag gilt und kein Jahr angegeben ist, ist das Ergebnis true.
Sonst ist das Ergebnis false. - 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
- Steht ein Tag ohne Monat, wird der zuletzt im Ausdruck aufgetretene Monat angenommen.
- Bei
closed
undoff
bin ich mir nicht im Klaren: gleiche Bedeutung oderoff
nur fürAusnahmetage
zulassen?
There is an english translation.