Index: twisted/web/xmlrpc.py
===================================================================
--- twisted/web/xmlrpc.py	(revision 28820)
+++ twisted/web/xmlrpc.py	(working copy)
@@ -92,10 +92,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
@@ -110,7 +111,8 @@
         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)
@@ -303,7 +305,7 @@
     protocol = QueryProtocol
 
     def __init__(self, path, host, method, user=None, password=None,
-                 allowNone=False, args=(), canceller=None):
+                 allowNone=False, args=(), canceller=None, useDateTime=False):
         """
         @type path: C{str}
         @param path: The path portion of the URL to which to post method calls.
@@ -338,12 +340,14 @@
         self.payload = payloadTemplate % (method,
             xmlrpclib.dumps(args, allow_none=allowNone))
         self.deferred = defer.Deferred(canceller)
+        self.useDateTime = useDateTime
 
     def parseResponse(self, contents):
         if not self.deferred:
             return
         try:
-            response = xmlrpclib.loads(contents)[0][0]
+            response = xmlrpclib.loads(contents,
+                use_datetime=self.useDateTime)[0][0]
         except:
             deferred, self.deferred = self.deferred, None
             deferred.errback(failure.Failure())
@@ -378,7 +382,8 @@
     """
     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
@@ -428,6 +433,7 @@
         if password is not None:
             self.password = password
         self.allowNone = allowNone
+        self.useDateTime = useDateTime
 
     def callRemote(self, method, *args):
         """
@@ -447,7 +453,7 @@
             connector.disconnect()
         factory = self.queryFactory(
             self.path, self.host, method, self.user,
-            self.password, self.allowNone, args, cancel)
+            self.password, self.allowNone, args, cancel, self.useDateTime)
         if self.secure:
             from twisted.internet import ssl
             connector = reactor.connectSSL(self.host, self.port or 443,
