Ich versuche, eine vollständige ISO8601-Datetime aus JSON-Daten in Lua zu parsen. Ich habe Probleme mit dem Spielmuster.
Bisher habe ich Folgendes:
%Vor%Ich merke, wie ich mit der Zeitzone umgehen kann, weil es kein logisches oder das - oder + oder nichts gibt. Obwohl ich weiß, dass lua die Zeitzone in der Funktion os.time nicht unterstützt, würde ich zumindest wissen, wie es angepasst werden musste.
Ich habe darüber nachgedacht, nach dem "." (Millisekunden und Zeitzone), aber dann hätte ich wirklich keine gültige Datetime. Millisekunden sind nicht so wichtig und ich hätte nichts dagegen, es zu verlieren, aber die Zeitzone ändert Dinge.
Hinweis: Jemand hat vielleicht einen viel besseren Code dafür und ich bin nicht damit verheiratet, ich muss nur etwas nützliches aus der datetime Zeichenfolge herausholen:)
Das vollständige ISO 8601-Format kann nicht mit einer einzelnen Musterübereinstimmung ausgeführt werden. Es gibt zu viel Variation.
Einige Beispiele von der Wikipedia-Seite :
YYYYMMDD
vs YYYY-MM-DD
YYYY-MM-DD
und YYYY-MM
sind beide gültige Daten YYYY-DDD
, wobei DDD
der Tag des Jahres (1-365 / 6) hh:mm:ss
, hh:mm
und hh
sind alle gültigen Zeiten hhmmss
, hhmm
14:30,5
, 1430,5
, 14:30.5
oder 1430.5
repräsentieren alle 14 Stunden, 30 Sekunden und eine Hälfte. ±hh:mm
, ±hh
oder ±hhmm
sein. Es gibt also viele mögliche Ausnahmen, die berücksichtigt werden müssen, wenn Sie nach der vollständigen Spezifikation analysieren wollen. In diesem Fall könnte der ursprüngliche Code wie folgt aussehen:
%Vor% Und dann müssten Sie parseDate
, parseTime
und parseOffset
erstellen. Der spätere sollte die Zeitversätze von UTC zurückgeben, während die ersten beiden Dinge wie komprimierte Formate, Zeitanteile, Komma oder Punkttrennzeichen und dergleichen berücksichtigen müssen.
parseDate
wird wahrscheinlich das Zeichen "^"
am Anfang seiner Musterübereinstimmungen verwenden, da das Datum am Anfang der Zeichenfolge stehen muss. Die Muster von parseTime
beginnen wahrscheinlich mit "T"
. Und parseOffset
endet mit "$"
, da die Zeitversätze, wenn sie existieren, am Ende stehen.
Eine Funktion "full ISO" parseOffset
könnte ähnlich aussehen:
Übrigens nehme ich an, dass Ihr Computer in UTC-Zeit arbeitet. Wenn dies nicht der Fall ist, müssen Sie einen zusätzlichen Offset für Ihre Stunden / Minuten berücksichtigen, um dies zu berücksichtigen.
%Vor%Um Ihren lokalen Offset zu erhalten, sollten Sie sich Ссылка ansehen.
Ich hoffe, das hilft. Grüße!
Es gibt auch das Paket luadate , das iso8601 unterstützt. (Sie möchten wahrscheinlich die gepatchte Version )