code: def _ReadAttributeValueDateTime(
        self, attribute_values_data, record_offset, attribute_values_data_offset,
        attribute_value_offset):
      
      if attribute_value_offset == 0:
        return None
  
      data_type_map = self._GetDataTypeMap('keychain_date_time')
  
      file_offset = (
          record_offset + attribute_values_data_offset + attribute_value_offset)
  
      attribute_value_offset -= attribute_values_data_offset + 1
      attribute_value_data = attribute_values_data[attribute_value_offset:]
  
      try:
        date_time_attribute_value = self._ReadStructureFromByteStream(
            attribute_value_data, file_offset, data_type_map)
      except (ValueError, errors.ParseError) as exception:
        raise errors.ParseError((
            'Unable to map date time attribute value data at offset: 0x{0:08x} '
            'with error: {1!s}').format(file_offset, exception))
  
      return date_time_attribute_value.date_time.rstrip('\x00')
docs: Reads a date time attribute value.
  
      Args:
        attribute_values_data (bytes): attribute values data.
        record_offset (int): offset of the record relative to the start of
            the file.
        attribute_values_data_offset (int): offset of the attribute values data
            relative to the start of the record.
        attribute_value_offset (int): offset of the attribute relative to
            the start of the record.
  
      Returns:
        str: date and time values.
  
      Raises:
        ParseError: if the attribute value cannot be read.