//テキストから予定を解析するメソッド
        public Appointment Parse(string text)
        {
            //全角数字を半角数字に
            string PreprocessedText = ConvertTextZenToHanNum(text);

            //スペース(全角半角)を取り除く(数字と数字の間のスペースは区切りがあるので削除しない)
            PreprocessedText = RemoveSpace(PreprocessedText);

            List <IndexComparable> listDateTime = new List <IndexComparable>();

            //テキストから日付を抽出
            listDateTime.AddRange(m_parserOfDate.Parse(PreprocessedText));
            //テキストから時刻を抽出
            listDateTime.AddRange(m_parserOfTime.Parse(PreprocessedText));

            //日付・時刻をテキスト内の出現順にソート
            listDateTime.Sort();

            var builder = new Appointment.Builder();

            for (int i = 0; i < listDateTime.Count; i++)
            {
                IndexComparable m = listDateTime[i];
                if (m is DateWithMatchedIndex)       //日付の場合
                {
                    builder.append(((DateWithMatchedIndex)m).m_date);
                }
                else if (m is TimeWithMatchedIndex)  //時刻の場合
                {
                    builder.append(((TimeWithMatchedIndex)m).m_time);
                }
            }

            return(builder.build());
        }
            public int CompareTo(object obj)
            {
                //nullより大きい
                if (obj == null)
                {
                    return(1);
                }

                IndexComparable m = obj as IndexComparable;

                //違う型とは比較できない
                if (m == null)
                {
                    throw new ArgumentException("別の型とは比較できません。", "obj");
                }
                return(m_index.CompareTo(m.m_index));
            }