Už asi šest let jsem profesionálním vývojářem. Během těch šesti let jsem nikdy nepracoval pro společnost nebo pro projekt, který by se v nějaké formě nesetkal s problémy s datem a časem.



Téměř každá aplikace, na které budete pracovat, vyžaduje nějakým způsobem využití času, což znamená, že v určitém okamžiku budete muset shromažďovat, ukládat, načítat a zobrazovat data nebo časy. Neexistuje žádná stříbrná kulka pro práci s daty nebo časy a nikdy nemůžete uniknout inherentní složitosti, která přichází s naší koncepcí času, ale můžete podniknout kroky, které vám usnadní bolest.



V letech, kdy pracuji s časem napříč různými programovacími jazyky, jsem zjistil, že následující znalosti jde dlouhou cestou.

Výběr správného formátu dat

Prvním krokem při práci s časy a daty je výběr reprezentace vašich dat. Zatímco různé formáty se mohou zdát víceméně stejné, zvolený formát bude mít velký dopad na to, jak svůj kód zapisujete a ladíte.

Použití číselného časového razítka, když potřebujete datum, bude znamenat analýzu časového razítka data a získání data z toho, což může nebo nemusí být přímé v závislosti na časovém pásmu.


anděl číslo 3131

Použití vlastního řetězce k vyjádření rozsahu času se zdá být snadné uložit a manipulovat s ním, ale je obtížné se jej dotazovat. Navíc použití jakéhokoli druhu reprezentace, které není lidským okem okamžitě rozpoznatelné, ladění kódu ztíží.

Při výběru formátu pro data nebo časy se řídím následujícími pravidly:



  1. Nikdy nepoužívejte číselné časové značky. Často je nejjednodušší je získat standardními knihovnami mezi různými programovacími jazyky, ale nejsou čitelné člověkem a pokušení manipulovat s nimi je příliš silné.
  2. Dodržovat ISO 8601 , standard, který definuje formát dat souvisejících s datem a časem. Je triviální najít knihovnu pro jakýkoli jazyk, který zvládne variace ISO 8601.
  3. ISO 8601 je standard, ale má mnoho variací. Měli byste vždy zvolit nejčitelnější variantu ISO 8601. To nevyžaduje žádné další úsilí, ale usnadňuje ladění.
  4. Řetězec časového razítka by měl obsahovat pouze data, která naprosto potřebujete. Při práci s časy by váš řetězec neměl obsahovat datum a při práci s datem, které je časové pásmo, by váš řetězec neměl obsahovat časové pásmo. Přidání dalších informací přidá nejednoznačnost operaci analýzy a záměru dat pro budoucí vývojáře
  5. Při ukládání časových pásem se v časových razítkách vždy normalizujte na stejné časové pásmo. To nejen usnadňuje počítači třídění a zpracování dat, ale také usnadňuje vývojáře.

Dodržování těchto pravidel vás předem nebude moc stát, ale usnadní vám život, když bude vaše aplikace zavedena a zjistíte, že vaše využití časů a dat není to, co jste očekávali.

Výběr správného nástroje

Stejně jako u většiny problémů v našem odvětví, zpracování času a data závisí na výběru správného nástroje pro danou práci.

Je lákavé používat nástroje ve standardní knihovně vašeho oblíbeného jazyka, ale to nemusí být ta nejlepší volba. Zatímco některé standardní knihovny mají fantastické funkce data a času (Python), jiné jsou přímo žalostné (Javascript). Použitím nesprávného nástroje je mnohem obtížnější vyvinout funkce založené na čase a to usnadňuje vklouznutí chyb do vaší aplikace.



Dobrá knihovna pro zpracování dat a časů vám umožní dodržovat 5 výše uvedených pravidel. Konkrétně by měl být schopen:

  • Analyzujte jakékoli datové zastoupení, na které můžete narazit (včetně externích zastoupení).
  • Výstup k libovolnému datovému zastoupení, které budete potřebovat (včetně externích zastoupení).
  • Manipulujte s daty a časy přidáním nebo odečtením jednotek času od nich.
  • Porovnejte data a časy.
  • Správně převádějte mezi časovými pásmy.

Je důležité, aby vaše knihovna tyto funkce podporovala, jinak bude pokušení pokusit se implementovat tuto funkci sami příliš vysoké. A aby bylo jasno, pokud se pokusíte implementovat některou z těchto funkcí sami, neuspějete.

Neprovádějte analýzu vlastních časových značek regulárními výrazy, nepřidávejte sekundy k číselnému časovému razítku, protože se to jeví jako normální číslo, a neporovnávejte data a časy pomocí operátoru rovnosti. Tyto knihovny existují, protože tyto problémy je těžké vyřešit a znovuobjevení kolečka ve vaší aplikaci vás prostě nechá zlomeným kolečkem.

Níže mám několik návrhů na knihovny, které vyhovují těmto kritériím:

Jazyk Knihovna
Krajta Standardní knihovna
Javascript Moment a Momentové časové pásmo
Java 8 a vyšší Standardní knihovna (java.time)
Java 7 a nižší Joda-Time
Rychlý SwiftDate

Pokud váš jazyk není uveden (protože s ním nejsem dostatečně obeznámen), jednoduše vyhledejte knihovnu data a času. Je pravděpodobné, že najdete dobrou knihovnu, která udělá vše, co potřebujete.

Vědět o čase

Poslední část znalostí, které musím sdílet, není specifická pro práci s daty a časy, ale je spíše obecnou filozofií, která nám pomáhá vyhnout se problémům, a týká se manipulace s datem a časem stejně jako všech ostatních problémů v programování .

Vždy zkontrolujte své předpoklady.

Ke každému předloženému problému přistupujeme s velkým množstvím znalostí a ještě větším množstvím předpokladů. Při zpracování dat a časů je důležitější než kdy jindy zkontrolovat své předpoklady, aby bylo zajištěno, že pro váš scénář stále platí.

Tento seznam , s názvem Falsehoods Programmers Believe About Time, poskytuje mnoho vynikajících příkladů, které ilustrují, že čas pravděpodobně není tím, čím jste si mysleli. Když navrhujete nebo vyvíjíte funkci, která se soustředí kolem času, doporučuji vám popadnout partnera a projít si tento seznam, abyste se vyhnuli uvedeným úskalím.

Časové chyby je notoricky obtížné chytit a ještě obtížněji je otestovat. Pokud vyvíjíte s ohledem na tento seznam, možná se budete moci vyhnout jemným chybám, které by ovlivnily vaše zákazníky, ale které se nemusí chytit (nejhorší druh chyby!)

Časová pásma

Žádná diskuse o časech nebo datech by nebyla úplná bez zmínky o časových pásmech. Kromě seznámení se s běžnými nepravdami uvedenými výše se seznamte také se základy časových pásem.

Časová pásma budou při práci s časem trvale bolestivým bodem, i když si myslíte, že je máte „vše vyřešené“. Mít trochu znalostí o časových pásmech vám pomůže soustředit vaše myšlení a pomůže vám zajistit, že při manipulaci s časy neděláte žádné logické chyby.

Bohužel neexistuje způsob, jak se úplně vyhnout obtížnosti ukládání a manipulace s časy a daty při programování. Pokud však budete postupovat podle těchto kroků a budete mít na paměti tyto znalosti, můžete si tento úkol usnadnit snížením množství kódu, který musíte napsat, a vnucením paradigmat, u nichž je méně pravděpodobné, že způsobí problémy.

Sdílej Se Svými Přáteli: