Hlavní navigace

Názor k článku Změna času je zase tu. Změna, kterou vlastně vůbec nepotřebujeme od Filip Jirsák - Ano, MS SQL je specifická databáze. Nicméně datetimeoffset...

  • Článek je starý, nové názory již nelze přidávat.
  • 25. 3. 2016 21:13

    Filip Jirsák

    Ano, MS SQL je specifická databáze. Nicméně datetimeoffset je právě datový typ, který umožňuje ukládat datum a čas s časovým pásmem.

    To, co vy složitě popisujete jako jakési podivné posunování času, je ve skutečnosti to, co jsem napsal já – změna časového pásma, které se používá pro lokální čas. V zimě používáme pro lokální čas časové pásmo SEČ (středoevropský čas, mezinárodní zkratka CET), v létě používáme časové pásmo SELČ (středoevropský letní čas, mezinárodní zkratka CEST).

    Pokud si čas ukládáte i s časovým pásmem, žádný problém nenastává. Protože SEČ na UTC převedete jednoduše tak, že odečtete jednu hodinu, SELČ na UTC převedete tak, že odečtete dvě hodiny. Špatná kombinace nastat nemůže. Problém máte jedině tehdy, když ukládáte datum a čas bez časové zóny, což je váš problém.

    Pokud vaše databáze nemá vestavěné funkce pro rozumnou práci s datem a časem, je to problém té databáze. Třeba PostgreSQL umí s datem a časem s časovým pásmem normálně pracovat. Záznamy v databázi můžete mít uložené klidně v UTC nebo v CET/CEST. Když si vytvoříte SQL dotaz, kde použijete čas 17–18 hodin v časové zóně Europe/Prague, v době kompilace dotazu se to převede na UTC a pak se to v databázi vyhledá normálně podle indexu.

Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).