IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MyCatDateTime(type, true));
            }

            if (length >= 0)
            {
                string value = packet.ReadString(length);
                return(ParseMyCat(value));
            }

            long bufLength = packet.ReadByte();
            int  year = 0, month = 0, day = 0;
            int  hour = 0, minute = 0, second = 0, microsecond = 0;

            if (bufLength >= 4)
            {
                year  = packet.ReadInteger(2);
                month = packet.ReadByte();
                day   = packet.ReadByte();
            }

            if (bufLength > 4)
            {
                hour   = packet.ReadByte();
                minute = packet.ReadByte();
                second = packet.ReadByte();
            }

            if (bufLength > 7)
            {
                microsecond = packet.Read3ByteInt();
                packet.ReadByte();
            }

            return(new MyCatDateTime(type, year, month, day, hour, minute, second, microsecond));
        }