svv/utils.py
changeset 58 4f4150296cd3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svv/utils.py	Thu Jan 20 23:14:07 2011 +0200
@@ -0,0 +1,55 @@
+"""
+    Miscellanous bucket of everything
+"""
+
+import datetime
+import time
+
+class LocalTimezone (datetime.tzinfo) :
+    """
+        Our platform's (the 'time' module) idea of our local timezone.
+    """
+
+    ZERO = datetime.timedelta(0)
+
+    STDOFFSET = datetime.timedelta(seconds = -time.timezone)
+
+    if time.daylight:
+        DSTOFFSET = datetime.timedelta(seconds = -time.altzone)
+    else:
+        DSTOFFSET = STDOFFSET
+
+    DSTDIFF = DSTOFFSET - STDOFFSET
+
+    def _isdst (self, dt) :
+        # time tuple in local time
+        tt = (dt.year, dt.month, dt.day,
+              dt.hour, dt.minute, dt.second,
+              dt.weekday(), 0, -1)
+        
+        # to UTC timestamp
+        stamp = time.mktime(tt)
+        
+        # roundtrip..
+        tt = time.localtime(stamp)
+        
+        # to figure out DST flag
+        return tt.tm_isdst > 0
+
+    def utcoffset (self, dt) :
+        if self._isdst(dt) :
+            return self.DSTOFFSET
+        else:
+            return self.STDOFFSET
+
+    def dst (self, dt) :
+        if self._isdst(dt) :
+            return self.DSTDIFF
+        else:
+            return self.ZERO
+
+    def tzname (self, dt) :
+        # varies by DST
+        return time.tzname[self._isdst(dt)]
+
+