Wikipedia:Lua/Werkstatt/Datum und Uhrzeit
Aufgabe: Entwicklung eines Bibliotheksmoduls zur Unterstützung deutsch- und englischsprachiger Formate für Datum und/oder Uhrzeit.
Konzeption
[Quelltext bearbeiten]Alle Funktionen von anderem Lua-Modul aus nutzbar; soweit dazu geeignet, auch von Vorlage=#invoke
aufrufbar.
- Alle zweifelsfreien Datumsformate für den deutsch- und englischsprachigen Raum sind bei der Eingabe zu unterstützen: 15. Februar 2013; 15.2.2013; 15.02.13; 14.8.98; 2013-06-12; 3. Jänner 2012; 5 Mar 2011; December 9, 2010; 1. Apr. 2012.
- Die Ausgabe soll in einigen wesentlichen deutschsprachigen Standardformen + ISO + Wiki-Standards erfolgen.
- Mit Uhrzeit ähnlich, aber weniger Varianten möglich.
- Fehlerbehandlung für Wartungskats ist zu unterstützen.
Daten
[Quelltext bearbeiten]Eingabe
[Quelltext bearbeiten]Siehe Diskussion
Abfangen aller
und U+00A0 und mehrfacher oder fehlender Leerzeichen bei der Eingabe. Interpretieren jedes eindeutigen Formats.
Neutrales Datenformat
[Quelltext bearbeiten]Siehe Diskussion
Die Eingabe wird, sofern zweifelsfrei interpretiert, in eine table gewandelt. Diese kann auch direkt von anderen Lua-Modulen belegt oder für Vergleichsoperationen und Berechnungen herangezogen werden. Alle Zahlen sind ganzzahlig, wodurch sich Genauigkeiten und erforderliche Ausgabefomate schnell und sicher bestimmen lassen.
Alle Daten-Komponenten sind optional. Nicht belegte waren bei der Eingabe nicht angegeben worden.
Komponente | Typ | Bemerkung |
---|---|---|
year |
number | >0 (=0??) |
month |
number | 1–12; auch ohne year
|
dom |
number | Nur, wenn auch month
|
week |
number | Nach ISO berechnet |
hour |
number | |
min |
number | Nur, wenn auch hour
|
sec |
number | Nur, wenn auch min
|
msec |
number | Nur, wenn auch sec
|
zone |
string, number, boolean | Code (CET,CEST,MEZ) oder Anzahl der Minuten false, nil: Lokal, einschließlich Sommerzeit |
jul |
boolean | false, nil: Gregorianischer Kalender |
bc |
boolean | false, nil: n. Chr. |
leap |
boolean | false, nil: min<60
|
isValid() |
function | Die momentane Tabelle ist gültig. |
format(spec) |
function | Formatiere gemäß spec |
spec
[Quelltext bearbeiten]Menschenfreundlicher Bezeichner für Ausgabeformat.
Bezeichner | Beispiel | #time | Bemerkung |
---|---|---|---|
T. Monat JJJJ hh:mm:ss Z nil, false |
8. Dezember 2024 23:39:23 (CEST) | j." "F Y H:i:s und Zeitzone
|
Sekunden, Minuten, Stunde nur wenn angegeben gewesen. |
dewiki
|
22:14, 12. Juni 2013 (CEST) |
|
Uhrzeit nur wenn angegeben gewesen. |
T. Monat JJJJ
|
12. Juni 2013 |
|
angegebene Uhrzeit unterdrücken |
T. Mon JJJJ
|
12. Jun. 2013 |
| |
T.Mon JJJJ
|
12. Jun. 2013 |
| |
TT.MM.JJJJ
|
12.06.2013 |
| |
T.M.JJJJ
|
12.6.2013 |
| |
ISO
|
2013-06-12 22:14:37+02:00 |
| |
ISO-T
|
2024-12-08T23:39:23+01:00 | c
| |
timestamp
|
20221030061027 |
|
{{REVISIONTIMESTAMP}} |
usw. usw. usw. |
mw.language:formatDate() kennt alle Formatierungsdetails gemäß Parser Funktion #time.
Funktionen
[Quelltext bearbeiten]Alle Lua-zugänglich. Jede story und spec ignoriert Whitespace drumrum.
- story ist die Zeichenkette mit zu interpretierender Eingabe.
- factory( story, lethal )
- Generiere table=Objekt
- Nur Lua-intern; insbesondere Eigenbedarf
- story
- string: Parser
- false/nil: liefert leeres Objekt, →table
- table: wird um Methoden ergänzt und belegt jede freie number=0.
- lethal
- true: throws error, if anything invalid
- story
- Liefert neutrale table, oder string mit Fehlermeldung
- format( story, spec )
- auch für Vorlagen
- Rufe factory() auf und mit deren Ergebnis .format(spec)
- isValid( story, light, lethal )
- zweifelsfrei interpretierbar
- auch für Vorlagen
- light: erlaube leeren Wert
- Rufe factory() auf; true wenn diese eine table liefert und diese .isValid()
- isPretty( story, spec, light )
- interpretierbar, und abgesehen von identisch mit spec-Resultat formatiert gewesen
- auch für Vorlagen
- light: erlaube leeren Wert
- Rufe format() auf; true wenn dies identisch story liefert
- timezone( shift, local )
- Kennung für Zeitzone
- shift: string, number, nil, false
- nil, false: Server-Bezugszeit
- local:
- nil: +02:00
- false: CET/CEST
- true: MEZ/MESZ
- shift: string, number, nil, false
- Ausgabeformate; standard: +nn:mm
Parsen
[Quelltext bearbeiten]- nbsp usw. → Leerzeichen
- Hinten Zeitzone?
- Klammern weg, Ablegen in Feld, Entfernen aus dem string
- Erste vier Zeichen alles Ziffern?
- Wenn ja, dann Jahr allein oder ISO oder timestamp
- Wenn nicht: Buchstaben vorhanden?
- Keine Buchstaben: Am Anfang Gruppe aus drei Zahlen, durch Nicht-Ziffern getrennt.
- Buchstaben:
- Am Anfang Buchstabengruppe, danach zwei Zahlengruppen
- Zahlengruppe-Buchstabengruppe-Zahlengruppe
- Buchstabengruppe (Großschreibung des ersten Buchstaben in Kleinschreibung wandeln) in Liste der de/en-Monatsnamen und derer ersten drei Buchstaben suchen. Zugeordnete Nummer 1–12 auslesen.
- Dritte Zahlengruppe ist Jahreszahl
- Zweistellige Jahreszahl 00–20 und 50–99 akzeptieren, ggf. warnen (Millenium bug)
Zweite Ausbaustufe
[Quelltext bearbeiten]- Servicefunktionen für Vorlage:JULGREGDATUM + Vorlage:GREGDATUM
- Zeitdifferenz zwischen neutralen Objekten; Addition, Subtraktion, Vergleich (als Methoden)
- Gültigkeitsregeln:
- Generell: 30. Februar usw. werden als feherhaft erkannt
- Vorgegebene Kriterien, etwa:
- Nicht vor dem …
- Nicht nach dem …
- Nicht in der Zukunft
enWP
[Quelltext bearbeiten]- en:Module:Age
- metatable; ausschlachten
- en:Module:Duration
- Sehr mager, aber können wir auch.
- en:Module:Jewishholidays
- Schaffen wir auch noch.