code: def parseDT(self, datetimeString, sourceTime=None,
                  tzinfo=None, version=None):
          
          # if sourceTime has a timetuple method, use thet, else, just pass the
          # entire thing to parse and prey the user knows what the hell they are
          # doing.
          sourceTime = getattr(sourceTime, 'timetuple', (lambda: sourceTime))()
          # You REALLY SHOULD be using pytz.  Using localize if available,
          # hacking if not.  Note, None is a valid tzinfo object in the case of
          # the ugly hack.
          localize = getattr(
              tzinfo,
              'localize',
              (lambda dt: dt.replace(tzinfo=tzinfo)),  # ugly hack is ugly :(
          )
  
          # Punt
          time_struct, ret_code = self.parse(
              datetimeString,
              sourceTime=sourceTime,
              version=version)
  
          # Comments from GHI indicate that it is desired to have the same return
          # signature on this method as that one it punts to, with the exception
          # of using datetime objects instead of time_structs.
          dt = localize(datetime.datetime(*time_struct[:6]))
          return dt, ret_code
docs: C{datetimeString} is as C{.parse}, C{sourceTime} has the same semantic
          meaning as C{.parse}, but now also accepts datetime objects.  C{tzinfo}
          accepts a tzinfo object.  It is advisable to use pytz.
  
  
          @type  datetimeString: string
          @param datetimeString: date/time text to evaluate
          @type  sourceTime:     struct_time, datetime, date, time
          @param sourceTime:     time value to use as the base
          @type  tzinfo:         tzinfo
          @param tzinfo:         Timezone to apply to generated datetime objs.
          @type  version:        integer
          @param version:        style version, default will use L{Calendar}
                                 parameter version value
  
          @rtype:  tuple
          @return: tuple of: modified C{sourceTime} and the result flag/context
  
          see .parse for return code details.