Rad s UTC (koordinirano univerzalno vrijeme) u SQL-u može biti malo težak, posebno ako ga trebate pretvoriti u različite vremenske zone, kao što je EST (istočno standardno vrijeme), na primjer. Još je teže kada uzmete u obzir ljetno računanje vremena. Međutim, uz pravilno razumijevanje i primjenu funkcija, zadatak postaje lakši. Važan dio ovog zadatka je razumijevanje koncepata UTC i EST i njihovog međusobnog odnosa.
Razumijevanje UTC i EST
UTC, skraćeno od Coordinated Universal Time, je vremenski standard koji svijet koristi za postavljanje svojih satova. Smatra se osnovnim vremenom od kojeg se računaju sve ostale vremenske zone. S druge strane, EST se odnosi na istočno standardno vrijeme, što je UTC-5. Što znači, pet sati je iza UTC. Međutim, tokom ljetnog računanja vremena, postaje UTC-4.
Prilikom pretvaranja između ove dvije vremenske zone, morat ćete koristiti specifične SQL funkcije i brinuti se za ljetno računanje vremena.
SQL funkcije za konverziju vremena
Da biste pretvorili UTC u EST u SQL-u, općenito biste koristili funkciju DATEADD. Ova funkcija dodaje određenu vrijednost dijelu datuma ili vremena u datumu. Evo SQL isječka za ovo:
SELECT DATEADD(hh, -5, GetUTCDate())
U ovom primjeru, GetUTCDate() dobiva trenutni UTC datum i vrijeme, a funkcija DATEADD oduzima 5 sati od njega da bi ga pretvorila u EST.
Rukovanje ljetnim računanjem vremena
Komplikacija proizlazi iz činjenice da istočno standardno vrijeme postaje istočno ljetno vrijeme (EDT) za dio godine. EDT je samo 4 sata iza UTC. Stoga je potrebno sredstvo za prilagođavanje ovoj činjenici prilikom konverzije.
Na primjer, ovaj isječak koda računa za ljetno računanje vremena:
SELECT
CASE
WHEN DATEADD(hh, -5, GetUTCDate()) BETWEEN
(SELECT DATEADD(hh, -5, dateadd(dd, 0-datediff(dd, 0, GetUTCDate()),
dbo.GetDaylightSavingsSwitchPoint_ForYear(DATEPART(YEAR,GetUTCDate()),1)))) AND
(SELECT DATEADD(hh, -5, dateadd(dd, 0-datediff(dd, 0, GetUTCDate()),
dbo.GetDaylightSavingsSwitchPoint_ForYear(DATEPART(YEAR,GetUTCDate()),2))))
THEN DATEADD(hh, -4, GetUTCDate()) ELSE DATEADD(hh, -5, GetUTCDate())
END AS EST
Zamršen dio ovog koda je potreba da se odredi tačna vremena i datuma početka i završetka ljetnog računanja vremena, što se mijenja iz godine u godinu. Ovo zahtijeva napredniju SQL stručnost.
Primjena: Planiranje i vođenje evidencije
Razumijevanje kako pretvoriti UTC u EST u SQL-u posebno je korisno kada se bavite sistemima za planiranje, vođenjem zapisa i bilo kojim programom koji rukuje datumom i vremenom. Primjene takvih konverzija uključuju sisteme za rezervacije, bankarske sisteme, evidentiranje događaja u različitim vremenskim zonama, da spomenemo samo neke.
To je takođe ključno u osiguravanju tačnog čuvanja istorijskih podataka, jer osigurava da je vrijeme ujednačeno bez obzira na varijacije vremenske zone.
Druge konverzije vremenskih zona
Osim pretvaranja UTC u EST, možda ćete morati i pretvoriti UTC u druge vremenske zone. Slično gore navedenom, također ćete koristiti funkciju DATEADD, a razlika je u broju sati koje dodajete ili oduzimate od UTC datuma i vremena.
Zapamtite, razumijevanje ovih konverzija vremenskih zona i mogućnost njihove precizne primjene je neophodna vještina za svakog SQL programera, posebno ako vaša aplikacija rukuje podacima s različitih geografskih lokacija.
