Index: django/contrib/syndication/feeds.py
===================================================================
--- django/contrib/syndication/feeds.py	(revision 8168)
+++ django/contrib/syndication/feeds.py	(working copy)
@@ -1,3 +1,5 @@
+from datetime import datetime, timedelta 
+
 from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
 from django.template import loader, Template, TemplateDoesNotExist
 from django.contrib.sites.models import Site, RequestSite
@@ -2,2 +4,3 @@
 from django.utils import feedgenerator
+from django.utils.tzinfo import FixedOffset
 from django.utils.encoding import smart_unicode, iri_to_uri
@@ -124,13 +127,31 @@
                 author_link = self.__get_dynamic_attr('item_author_link', item)
             else:
                 author_email = author_link = None
+                    
+            pubdate = self.__get_dynamic_attr('item_pubdate', item)
+            now = datetime.now()
+            utcnow = datetime.utcnow()   
+
+            # Must always subtract smaller time from larger time here. 
+            if utcnow > now:
+                sign = -1
+                tzDifference = (utcnow - now) 
+            else:
+                sign = 1
+                tzDifference = (now - utcnow) 
+            
+            # Round the timezone offset to the nearest half hour.    
+            tzOffsetMinutes = sign * ((tzDifference.seconds / 60 + 15) / 30) * 30
+            tzOffset = timedelta(minutes=tzOffsetMinutes)
+            pubdate = pubdate.replace(tzinfo=FixedOffset(tzOffset))
+             
             feed.add_item(
                 title = title_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})),
                 link = link,
                 description = description_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})),
                 unique_id = self.__get_dynamic_attr('item_guid', item, link),
                 enclosure = enc,
-                pubdate = self.__get_dynamic_attr('item_pubdate', item),
+                pubdate = pubdate,
                 author_name = author_name,
                 author_email = author_email,
                 author_link = author_link,
Index: django/utils/tzinfo.py
===================================================================
--- django/utils/tzinfo.py	(revision 8168)
+++ django/utils/tzinfo.py	(working copy)
@@ -14,8 +14,13 @@
 class FixedOffset(tzinfo):
     "Fixed offset in minutes east from UTC."
     def __init__(self, offset):
-        self.__offset = timedelta(minutes=offset)
-        self.__name = u"%+03d%02d" % (offset // 60, offset % 60)
+        if isinstance(offset, timedelta):
+            self.__offset = offset
+            offset = self.__offset.seconds // 60
+        else:
+            self.__offset = timedelta(minutes=offset)
+            
+        self.__name = u"%+03d%02d" % (offset / 60, offset % 60)
 
     def __repr__(self):
         return self.__name
@@ -28,7 +33,7 @@
 
     def dst(self, dt):
         return timedelta(0)
-
+        
 class LocalTimezone(tzinfo):
     "Proxy timezone information from time module."
     def __init__(self, dt):
Index: django/utils/feedgenerator.py
===================================================================
--- django/utils/feedgenerator.py	(revision 8168)
+++ django/utils/feedgenerator.py	(working copy)
@@ -22,14 +22,25 @@
 from django.utils.xmlutils import SimplerXMLGenerator
 from django.utils.encoding import force_unicode, iri_to_uri
 import datetime, re, time
-import email.Utils
 
 def rfc2822_date(date):
-    return email.Utils.formatdate(time.mktime(date.timetuple()))
+    # We do this ourselves to be timezone aware, email.Utils is not tz aware.
+    if date.tzinfo:
+        time_str = date.strftime('%a, %d %b %Y %H:%M:%S ')  
+        offset = date.tzinfo.utcoffset(date)        
+        timezone = (offset.days * 24 * 60) + (offset.seconds / 60)
+        hour, minute = divmod(timezone, 60)
+        return time_str + "%+03d%02d" % (hour, minute)
+    else:
+        return date.strftime('%a, %d %b %Y %H:%M:%S -0000')
 
 def rfc3339_date(date):
     if date.tzinfo:
-        return date.strftime('%Y-%m-%dT%H:%M:%S%z')
+        time_str = date.strftime('%Y-%m-%dT%H:%M:%S')  
+        offset = date.tzinfo.utcoffset(date)        
+        timezone = (offset.days * 24 * 60) + (offset.seconds / 60)
+        hour, minute = divmod(timezone, 60)
+        return time_str + "%+03d:%02d" % (hour, minute)
     else:
         return date.strftime('%Y-%m-%dT%H:%M:%SZ')
 
