DST funkcija
Thursday, 27.09.2012 – mradovanDST (Daylight Saving Time) je interesantna fora uvedena za vrijeme 1. svj. rata u svrhu bolje usklađenosti dnevnog i radnog svjetla, te naravno ušteda na potrošnji energije za osvjetljavanje.
Koliko god korisno, pomicanje sata unatrag u proljeće te unaprijed na jesen ima i svoje štetne posljedice, a to su anomalije u broju sati u danima pomicanja kazaljke. Tako se dogodi da u prvom slučaju imamo 23 sata, dok u drugom slučaju imamo dan u trajanju od 25 sati.
Pojedini sustavi standardno zapisuju vremena u UTC formatu, a za svrhu prikaza potrebno je to vrijeme konvertirati u lokalno vrijeme. Iako postoji vjerojatno mnogo algoritama i biblioteka za to, ja sam za potrebe obrade podataka na razini Oracle baze podataka napisao funkciju koja ulazno UTC vrijeme vraća kao lokalno vrijeme. Varijabla l_result unutar funkcije ima inicijalnu vrijednost 1, a to se odnosi na +1 vremensku zonu kojoj pripadamo. Ako živimo npr. u Londonu, ta varijabla bi trebala imati inicijalnu vrijednost 0. Datum pomicanja sata nije fiksan, već se radi o posljednjoj nedjelji u 3. i 10. mjesecu u godini.
CREATE OR REPLACE FUNCTION ARCHDB.LOCALTIME(utc_in date) RETURN date IS l_start date; l_end date; l_result number := 1; BEGIN l_start := to_date('31.03.' || extract (YEAR FROM utc_in), 'dd.mm.yyyy'); l_end := to_date('31.10.' || extract (YEAR FROM utc_in), 'dd.mm.yyyy'); SELECT (TRUNC (LAST_DAY (l_start) + 1, 'iw') - 22/24) INTO l_start FROM DUAL; SELECT (TRUNC (LAST_DAY (l_end) + 1, 'iw') - 21/24) INTO l_end FROM DUAL; IF utc_in BETWEEN l_start AND l_end THEN RETURN utc_in + (l_result + 1)/24; ELSE RETURN utc_in + l_result/24; END IF; EXCEPTION WHEN others THEN RETURN NULL; END LOCALTIME;
2 Responses to “DST funkcija”
Veoma korisno!
A jesi li razmisljao o koristenju tipa TIMESTAMP WITH TIME ZONE, odnosno TIMESTAMP WITH LOCAL TIME ZONE ( http://docs.oracle.com/cd/E11882_01/server.112/e17118/sql_elements001.htm#autoId16 ) ?
By Dejan on Sep 29, 2012
Zahvaljujem na digresiji, dobra preporuka, no u ovom slučaju sam kupio podatke koji su spremljeni u MS SQL bazi od strane posebnog industrijskog softvera koji očitava mjerenja sa raznih mjernih uređaja, i na takve podatke nisam imao nikakav utjecaj.
Tu bi se doduše dalo igrati sa date funkcijama i njihovim parametrima, ali ovo mi je izgledalo nekako pouzdanije ;).
By MIhael Radovan on Oct 1, 2012