Added support for timezone in date field.  getdate_tz() and
parsedate_tz() return a 10-tuple, the last field is the tz offset in
seconds (e.g. -18000 or -5 hours for EST).
diff --git a/Lib/rfc822.py b/Lib/rfc822.py
index 20abad8..dc5e714 100644
--- a/Lib/rfc822.py
+++ b/Lib/rfc822.py
@@ -253,6 +253,18 @@
 			return None
 		return parsedate(data)
 
+	# Retrieve a date field from a header as a 10-tuple.  
+	# The first 9 elements make up a tuple compatible
+	# with time.mktime(), and the 10th is the offset
+	# of the poster's time zone from GMT/UTC.
+
+	def getdate_tz(self, name):
+		try:
+			data = self[name]
+		except KeyError:
+			return None
+		return parsedate_tz(data)
+
 
 	# Access as a dictionary (only finds *last* header of each type):
 
@@ -386,8 +398,21 @@
 _monthnames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
 	  'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
 
-def parsedate(data):
-	# XXX This still mostly ignores timezone matters at the moment...
+# The timezone table does not include the military time zones defined
+# in RFC822, other than Z.  According to RFC1123, the description in
+# RFC822 gets the signs wrong, so we can't rely on any such time
+# zones.  RFC1123 recommends that numeric timezone indicators be used
+# instead of timezone names.
+
+_timezones = {'UT':0, 'UTC':0, 'GMT':0, 'Z':0, 
+	      'AST': -400, 'ADT': -300,  # Atlantic standard
+	      'EST': -500, 'EDT': -400,  # Eastern
+	      'CST': -600, 'CDT':-500,   # Centreal
+	      'MST':-700, 'MDT':-600,    # Mountain
+	      'PST':-800, 'PDT':-700     # Pacific
+	     }    
+
+def parsedate_tz(data):
 	data = string.split(data)
 	if data[0][-1] == ',':
 		# There's a dayname here. Skip it
@@ -420,9 +445,29 @@
 		tss = string.atoi(tss)
 	except string.atoi_error:
 		return None
-	tuple = (yy, mm, dd, thh, tmm, tss, 0, 0, 0)
+	tzoffset=0
+	tz=string.upper(tz)
+	if _timezones.has_key(tz):
+		tzoffset=_timezones[tz]
+	else:
+		try: 
+			tzoffset=string.atoi(tz)
+		except string.atoi_error: 
+			pass
+	# Convert a timezone offset into seconds ; -0500 -> -18000
+	if tzoffset<0: tzsign=-1
+	else: tzsign=1
+	tzoffset=tzoffset*tzsign
+	tzoffset = tzsign * ( (tzoffset/100)*3600 + (tzoffset % 100)*60)
+	tuple = (yy, mm, dd, thh, tmm, tss, 0, 0, 0, tzoffset)
 	return tuple
 
+def parsedate(data):
+	t=parsedate_tz(data)
+	if type(t)==type( () ):
+		return t[:9]
+	else: return t    
+
 
 # When used as script, run a small test program.
 # The first command line argument must be a filename containing one
@@ -430,7 +475,7 @@
 
 if __name__ == '__main__':
 	import sys, os
-	file = os.path.join(os.environ['HOME'], 'Mail/drafts/,1')
+	file = os.path.join(os.environ['HOME'], 'Mail/inbox/1')
 	if sys.argv[1:]: file = sys.argv[1]
 	f = open(file, 'r')
 	m = Message(f)
@@ -438,9 +483,15 @@
 	print 'To:', m.getaddrlist('to')
 	print 'Subject:', m.getheader('subject')
 	print 'Date:', m.getheader('date')
-	date = m.getdate('date')
+	date = m.getdate_tz('date')
 	if date:
-		print 'ParsedDate:', time.asctime(date)
+		print 'ParsedDate:', time.asctime(date[:-1]),
+		hhmmss = date[-1]
+		hhmm, ss = divmod(hhmmss, 60)
+		hh, mm = divmod(hhmm, 60)
+		print "%+03d%02d" % (hh, mm),
+		if ss: print ".%02d" % ss,
+		print
 	else:
 		print 'ParsedDate:', None
 	m.rewindbody()