(1) call mktime() just before strftime(); it normalizes the buffer and
may set the timezone name for BSD systems...

(2) fake all of the timezone variables for the mac.
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 3fedfa6..ce16ecc 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -321,6 +321,7 @@
 	buf.tm_mon--;
 	buf.tm_wday = (buf.tm_wday + 1) % 7;
 	buf.tm_yday--;
+	(void) mktime(&buf);
 	/* I hate these functions that presume you know how big the output
 	 * will be ahead of time...
 	 */
@@ -471,8 +472,15 @@
 	}
 #else
 #ifdef macintosh
+	/* The only thing we can obtain is the current timezone
+	** (and whether dst is currently _active_, but that is not what
+	** we're looking for:-( )
+	*/
 	initmactimezone();
 	ins(d, "timezone", PyInt_FromLong(timezone));
+	ins(d, "altzone", PyInt_FromLong(timezone));
+	ins(d, "daylight", PyInt_FromLong((long)0));
+	ins(d, "tzname", Py_BuildValue("(zz)", "", ""));
 #endif /* macintosh */
 #endif /* HAVE_TM_ZONE */
 #endif /* !HAVE_TZNAME */