Index: twisted/web/xmlrpc.py
===================================================================
--- twisted/web/xmlrpc.py	(revision 23474)
+++ twisted/web/xmlrpc.py	(working copy)
@@ -95,10 +95,11 @@
     separator = '.'
     allowedMethods = ('POST',)
 
-    def __init__(self, allowNone=False):
+    def __init__(self, allowNone=False, useDateTime=False):
         resource.Resource.__init__(self)
         self.subHandlers = {}
         self.allowNone = allowNone
+        self.useDateTime = useDateTime
 
     def putSubHandler(self, prefix, handler):
         self.subHandlers[prefix] = handler
@@ -113,7 +114,7 @@
         request.content.seek(0, 0)
         request.setHeader("content-type", "text/xml")
         try:
-            args, functionPath = xmlrpclib.loads(request.content.read())
+            args, functionPath = xmlrpclib.loads(request.content.read(), use_datetime=self.useDateTime)
         except Exception, e:
             f = Fault(self.FAILURE, "Can't deserialize input: %s" % (e,))
             self._cbRender(f, request)
@@ -301,18 +302,19 @@
     protocol = QueryProtocol
 
     def __init__(self, path, host, method, user=None, password=None,
-                 allowNone=False, args=()):
+                 allowNone=False, args=(), useDateTime=False):
         self.path, self.host = path, host
         self.user, self.password = user, password
         self.payload = payloadTemplate % (method,
             xmlrpclib.dumps(args, allow_none=allowNone))
         self.deferred = defer.Deferred()
+        self.useDateTime = useDateTime
 
     def parseResponse(self, contents):
         if not self.deferred:
             return
         try:
-            response = xmlrpclib.loads(contents)
+            response = xmlrpclib.loads(contents, use_datetime=self.useDateTime)
         except:
             deferred, self.deferred = self.deferred, None
             deferred.errback(failure.Failure())
@@ -347,7 +349,7 @@
     """
     queryFactory = _QueryFactory
 
-    def __init__(self, url, user=None, password=None, allowNone=False):
+    def __init__(self, url, user=None, password=None, allowNone=False, useDateTime=False):
         """
         @type url: C{str}
         @param url: The URL to which to post method calls.  Calls will be made
@@ -370,6 +372,11 @@
         @type allowNone: C{bool} or None
         @param allowNone: allow the use of None values in parameters. It's
         passed to the underlying xmlrpclib implementation. Default to False.
+
+        @type useDateTime: C{bool} or None
+        @param useDateTime: Convert xmlrpclib.DateTime objects to datetime.datetime objects. It's
+        passed to the underlying xmlrpclib implementation. Default to False.
+
         """
         scheme, netloc, path, params, query, fragment = urlparse.urlparse(url)
         netlocParts = netloc.split('@')
@@ -397,11 +404,12 @@
         if password is not None:
             self.password = password
         self.allowNone = allowNone
+        self.useDateTime = useDateTime
 
     def callRemote(self, method, *args):
         factory = self.queryFactory(
             self.path, self.host, method, self.user,
-            self.password, self.allowNone, args)
+            self.password, self.allowNone, args, self.useDateTime)
         if self.secure:
             from twisted.internet import ssl
             reactor.connectSSL(self.host, self.port or 443,
