parameters: (encoded_datetime)
return_statement: return datetime.datetime(decoded_datetime.year,
                             decoded_datetime.month,
                             decoded_datetime.day,
                             decoded_datetime.hour,
                             decoded_datetime.minute,
                             decoded_datetime.second,
                             decoded_datetime.microsecond,
                             TimeZoneOffset(offset_minutes))
docstring: Decode a DateTimeField parameter from a string to a python datetime.
  
    Args:
      encoded_datetime: A string in RFC 3339 format.
  
    Returns:
      A datetime object with the date and time specified in encoded_datetime.
  
    Raises:
      ValueError: If the string is not in a recognized format.
docstring_summary: Decode a DateTimeField parameter from a string to a python datetime.
docstring_tokens: Decode a DateTimeField parameter from a string to a python datetime .
function: def decode_datetime(encoded_datetime):
    """Decode a DateTimeField parameter from a string to a python datetime.
  
    Args:
      encoded_datetime: A string in RFC 3339 format.
  
    Returns:
      A datetime object with the date and time specified in encoded_datetime.
  
    Raises:
      ValueError: If the string is not in a recognized format.
    """
    # Check if the string includes a time zone offset.  Break out the
    # part that doesn't include time zone info.  Convert to uppercase
    # because all our comparisons should be case-insensitive.
    time_zone_match = _TIME_ZONE_RE.search(encoded_datetime)
    if time_zone_match:
      time_string = encoded_datetime[:time_zone_match.start(1)].upper()
    else:
      time_string = encoded_datetime.upper()
  
    if '.' in time_string:
      format_string = '%Y-%m-%dT%H:%M:%S.%f'
    else:
      format_string = '%Y-%m-%dT%H:%M:%S'
  
    decoded_datetime = datetime.datetime.strptime(time_string, format_string)
  
    if not time_zone_match:
      return decoded_datetime
  
    # Time zone info was included in the parameter.  Add a tzinfo
    # object to the datetime.  Datetimes can't be changed after they're
    # created, so we'll need to create a new one.
    if time_zone_match.group('z'):
      offset_minutes = 0
    else:
      sign = time_zone_match.group('sign')
      hours, minutes = [int(value) for value in
                        time_zone_match.group('hours', 'minutes')]
      offset_minutes = hours * 60 + minutes
      if sign == '-':
        offset_minutes *= -1
  
    return datetime.datetime(decoded_datetime.year,
                             decoded_datetime.month,
                             decoded_datetime.day,
                             decoded_datetime.hour,
                             decoded_datetime.minute,
                             decoded_datetime.second,
                             decoded_datetime.microsecond,
                             TimeZoneOffset(offset_minutes))
function_tokens: def decode_datetime ( encoded_datetime ) : # Check if the string includes a time zone offset.  Break out the # part that doesn't include time zone info.  Convert to uppercase # because all our comparisons should be case-insensitive. time_zone_match = _TIME_ZONE_RE . search ( encoded_datetime ) if time_zone_match : time_string = encoded_datetime [ : time_zone_match . start ( 1 ) ] . upper ( ) else : time_string = encoded_datetime . upper ( ) if '.' in time_string : format_string = '%Y-%m-%dT%H:%M:%S.%f' else : format_string = '%Y-%m-%dT%H:%M:%S' decoded_datetime = datetime . datetime . strptime ( time_string , format_string ) if not time_zone_match : return decoded_datetime # Time zone info was included in the parameter.  Add a tzinfo # object to the datetime.  Datetimes can't be changed after they're # created, so we'll need to create a new one. if time_zone_match . group ( 'z' ) : offset_minutes = 0 else : sign = time_zone_match . group ( 'sign' ) hours , minutes = [ int ( value ) for value in time_zone_match . group ( 'hours' , 'minutes' ) ] offset_minutes = hours * 60 + minutes if sign == '-' : offset_minutes *= - 1 return datetime . datetime ( decoded_datetime . year , decoded_datetime . month , decoded_datetime . day , decoded_datetime . hour , decoded_datetime . minute , decoded_datetime . second , decoded_datetime . microsecond , TimeZoneOffset ( offset_minutes ) )