Return data formatted into a human readable time stamp.

	:param str endianess: The endianess to use when packing values ('>' or '<')
	:param int tm_format: The format that the data is packed in, this typically
	  corresponds with the value in the GEN_CONFIG_TBL (table #0) (1 <= tm_format <= 4)
	:param bytes data: The packed and machine-formatted data to parse
	:rtype: str

def format_ltime(endianess, tm_format, data):
	"""
	Return data formatted into a human readable time stamp.

	:param str endianess: The endianess to use when packing values ('>' or '<')
	:param int tm_format: The format that the data is packed in, this typically
	  corresponds with the value in the GEN_CONFIG_TBL (table #0) (1 <= tm_format <= 4)
	:param bytes data: The packed and machine-formatted data to parse
	:rtype: str
	"""
	if tm_format == 0:
		return ''
	elif tm_format == 1 or tm_format == 2:  # I can't find solid documentation on the BCD data-type
		y = data[0]
		year = '????'
		if 90 <= y <= 99:
			year = '19' + str(y)
		elif 0 <= y <= 9:
			year = '200' + str(y)
		elif 10 <= y <= 89:
			year = '20' + str(y)
		month = data[1]
		day = data[2]
		hour = data[3]
		minute = data[4]
		second = data[5]
	elif tm_format == 3 or tm_format == 4:
		if tm_format == 3:
			u_time = float(struct.unpack(endianess + 'I', data[0:4])[0])
			second = float(data[4])
			final_time = time.gmtime((u_time * 60) + second)
		elif tm_format == 4:
			final_time = time.gmtime(float(struct.unpack(endianess + 'I', data[0:4])[0]))
		year = str(final_time.tm_year)
		month = str(final_time.tm_mon)
		day = str(final_time.tm_mday)
		hour = str(final_time.tm_hour)
		minute = str(final_time.tm_min)
		second = str(final_time.tm_sec)

	return "{0} {1} {2} {3}:{4}:{5}".format((MONTHS.get(month) or 'UNKNOWN'), day, year, hour, minute, second)