25.01.2023, Vladimír Klaus, navštíveno 707x
Tato série článků bude postupně doplňována všemi možnými způsoby práce s datumem a časem v jazycích a systémech, které používám. Každý programátor jistě potvrdí, že toto je jedna z nejhorších oblastí, kde skoro nic není standardem a zajistit korektní zpracování těchto údajů není snadné.
V čem je u datumů vlastně tedy problém:
- různé národní zápisy vč. různých oddělovačů
- různé formáty nastavené uživatelem či výrobcem v zařízení
- zimní/letní čas
- posun proti GMT
- různé normy s komplikovanými zápisy
Normy
Jasně, normy tu jsou a občas je někdo i dodržuje, takže pokud máte to štěstí a najdete i odpovídající funkce, které s těmito normami umí, může to být fajn. V každém případě jsou normy složité, často umožňují různé zápisy a je proto nanejvýš vhodné pro zpracování takových údajů používat ověřené knihovny a nesnažit se parsovat text vlastními silami.
ISO8601
ISO 8601 je mezinárodní norma pro zápis data a času, kdy jsou prvky data řazeny od údajů o delších časových úsecích po údaje o nejmenších při standardním počtu znaků, tedy např.:
- 28. 1. 2023 -> 2023-01-28, 2023-01-28T00:00:00+00:00
- 28. 1. 2023 19:50:37 -> 2023-01-28T19:50:37+00:00
RFC 822, RFC 2822
Jedná se o formát dat přenášených po internetu, (kapitola "3.3. Date and Time Specification") vytvořený s cílem jednotné reprezentace data a času, používaný v kódu HTTP a hlavičkách e‑mailových zpráv. Výše uvedené příklady:
- 28. 1. 2023 -> Sat, 28 Jan 2023 00:00:00 CET
- 28. 1. 2023 19:50:37 -> Sat, 28 Jan 2023 19:50:37 CET
UNIX
Jde o počet sekund nebo milisekund (záleží na systému) od 1.1.1970 (Unix Epoch time), takže opět výše uvedené příklady:
- 28. 1. 2023 -> 1674860400000
- 28. 1. 2023 19:50:37 -> 1674931837000
V dalších článcích bych se chtěl věnovat práci v těchto jazycích a systémech (bez záruky):
- Delphi
- C#
- JavaScript/TypeScript
- SQL Server
- Příkazový řádek Windows (CMD)
- Regulární výrazy
Zdroje:
- https://dencode.com/date
- https://en.wikipedia.org/wiki/ISO_8601
- https://cs.wikipedia.org/wiki/ISO_8601
- https://www.rfc-editor.org/rfc/rfc2822
- https://en.wikipedia.org/wiki/Unix_time
- https://www.epochconverter.com/