]> granicus.if.org Git - python/commitdiff
timezone support for macintosh (Jack)
authorGuido van Rossum <guido@python.org>
Wed, 8 Oct 1997 15:27:56 +0000 (15:27 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 8 Oct 1997 15:27:56 +0000 (15:27 +0000)
Modules/timemodule.c

index 9a8fb8b5b55cc492e5433cd7062c3293ee78cc21..8b125083a83c4e9297833140562d194bb43c5c02 100644 (file)
@@ -89,6 +89,37 @@ extern int ftime();
 static int floatsleep Py_PROTO((double));
 static double floattime Py_PROTO(());
 
+#ifdef macintosh
+/* Our own timezone. We have enough information to deduce whether
+** DST is on currently, but unfortunately we cannot put it to good
+** use because we don't know the rules (and that is needed to have
+** localtime() return correct tm_isdst values for times other than
+** the current time. So, we cop out and only tell the user the current
+** timezone.
+*/
+static long timezone;
+
+static void 
+initmactimezone()
+{
+       MachineLocation loc;
+       long            delta;
+
+       ReadLocation(&loc);
+       
+       if (loc.latitude == 0 && loc.longitude == 0 && loc.u.gmtDelta == 0)
+               return;
+       
+       delta = loc.u.gmtDelta & 0x00FFFFFF;
+       
+       if (delta & 0x00800000)
+               delta |= 0xFF000000;
+       
+       timezone = -delta;
+}
+#endif /* macintosh */
+
+
 static PyObject *
 time_time(self, args)
        PyObject *self;
@@ -430,6 +461,11 @@ inittime()
                ins(d, "tzname",
                     Py_BuildValue("(zz)", wintername, summername));
        }
+#else
+#ifdef macintosh
+       initmactimezone();
+       ins(d, "timezone", PyInt_FromLong(timezone));
+#endif /* macintosh */
 #endif /* HAVE_TM_ZONE */
 #endif /* !HAVE_TZNAME */
        if (PyErr_Occurred())