/// <summary>
        ///     Creates a list of all valid date time format parts
        /// </summary>
        private static void CreateDateTimeFormatParts()
        {
            DateTimeFormatsParts.Add("yy", new DateTimeFormatPartTO("yy", false, "Year in 2 digits: 08"));
            DateTimeFormatPartOptions.Add("yy",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsTextNumeric, true, null, AssignYears)
                });

            DateTimeFormatsParts.Add("yyyy", new DateTimeFormatPartTO("yyyy", false, "Year in 4 digits: 2008"));
            DateTimeFormatPartOptions.Add("yyyy",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(4, IsTextNumeric, true, null, AssignYears)
                });

            DateTimeFormatsParts.Add("mm", new DateTimeFormatPartTO("mm", false, "Month in 2 digits: 03"));
            DateTimeFormatPartOptions.Add("mm",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberMonth, true, null, AssignMonths)
                });

            DateTimeFormatsParts.Add("m", new DateTimeFormatPartTO("m", false, "Month in single digit: 3"));
            DateTimeFormatPartOptions.Add("m",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberMonth, true, null, AssignMonths),
                    new DateTimeFormatPartOptionTO(1, IsNumberMonth, true, null, AssignMonths),
                });

            DateTimeFormatsParts.Add("M", new DateTimeFormatPartTO("M", false, "Month text abbreviated: Mar"));
            DateTimeFormatPartOptions.Add("M",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[0].Length, IsTextJanuary, false,
                        1, AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[1].Length, IsTextFebuary, false,
                        2, AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[2].Length, IsTextMarch, false, 3,
                        AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[3].Length, IsTextApril, false, 4,
                        AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[4].Length, IsTextMay, false, 5,
                        AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[5].Length, IsTextJune, false, 6,
                        AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[6].Length, IsTextJuly, false, 7,
                        AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[7].Length, IsTextAugust, false,
                        8, AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[8].Length, IsTextSeptember,
                        false, 9, AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[9].Length, IsTextOctober, false,
                        10, AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[10].Length, IsTextNovember,
                        false, 11, AssignMonths),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[11].Length, IsTextDecember,
                        false, 12, AssignMonths),
                });

            DateTimeFormatsParts.Add("MM", new DateTimeFormatPartTO("MM", false, "Month text in full: March"));
            DateTimeFormatPartOptions.Add("MM",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[0].Length,
                        IsTextJanuary, false, 1, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[1].Length,
                        IsTextFebuary, false, 2, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[2].Length,
                        IsTextMarch, false, 3, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[3].Length,
                        IsTextApril, false, 4, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[4].Length,
                        IsTextMay, false, 5, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[5].Length,
                        IsTextJune, false, 6, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[6].Length,
                        IsTextJuly, false, 7, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[7].Length,
                        IsTextAugust, false, 8, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[8].Length,
                        IsTextSeptember, false, 9, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[9].Length,
                        IsTextOctober, false, 10, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[10].Length,
                        IsTextNovember, false, 11, AssignMonths),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[11].Length,
                        IsTextDecember, false, 12, AssignMonths),
                });

            DateTimeFormatsParts.Add("d", new DateTimeFormatPartTO("d", false, "Day of month in single digit: 6"));
            DateTimeFormatPartOptions.Add("d",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberDay, true, null, AssignDays),
                    new DateTimeFormatPartOptionTO(1, IsNumberDay, true, null, AssignDays)
                });

            DateTimeFormatsParts.Add("dd", new DateTimeFormatPartTO("dd", false, "Day of month in 2 digits: 06"));
            DateTimeFormatPartOptions.Add("dd",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberDay, true, null, AssignDays)
                });

            DateTimeFormatsParts.Add("DW", new DateTimeFormatPartTO("DW", false, "Day of Week in full: Thursday"));
            DateTimeFormatPartOptions.Add("DW",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.DayNames[0].Length,
                        IsTextSunday, false, 7, AssignDaysOfWeek),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.DayNames[1].Length,
                        IsTextMonday, false, 1, AssignDaysOfWeek),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.DayNames[2].Length,
                        IsTextTuesday, false, 2, AssignDaysOfWeek),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.DayNames[3].Length,
                        IsTextWednesday, false, 3, AssignDaysOfWeek),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.DayNames[4].Length,
                        IsTextThursday, false, 4, AssignDaysOfWeek),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.DayNames[5].Length,
                        IsTextFriday, false, 5, AssignDaysOfWeek),
                    new DateTimeFormatPartOptionTO(CultureInfo.CurrentCulture.DateTimeFormat.DayNames[6].Length,
                        IsTextSaturday, false, 6, AssignDaysOfWeek),
                });

            DateTimeFormatsParts.Add("dW", new DateTimeFormatPartTO("dW", false, "Day of Week text abbreviated: Thu"));
            DateTimeFormatPartOptions.Add("dW",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames[0].Length, IsTextSunday, false, 7,
                        AssignDaysOfWeek, 6),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames[1].Length, IsTextMonday, false, 1,
                        AssignDaysOfWeek, 6),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames[2].Length, IsTextTuesday, false, 2,
                        AssignDaysOfWeek, 7),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames[3].Length, IsTextWednesday, false,
                        3, AssignDaysOfWeek, 9),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames[4].Length, IsTextThursday, false,
                        4, AssignDaysOfWeek, 8),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames[5].Length, IsTextFriday, false, 5,
                        AssignDaysOfWeek, 6),
                    new DateTimeFormatPartOptionTO(
                        CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames[6].Length, IsTextSaturday, false,
                        6, AssignDaysOfWeek, 7),
                });

            DateTimeFormatsParts.Add("dw", new DateTimeFormatPartTO("dw", false, "Day of Week number: 4"));
            DateTimeFormatPartOptions.Add("dw",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(1, IsNumberDayOfWeek, true, null, AssignDaysOfWeek),
                });

            DateTimeFormatsParts.Add("dy", new DateTimeFormatPartTO("dy", false, "Day of year: 66"));
            DateTimeFormatPartOptions.Add("dy",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(3, IsNumberDayOfYear, true, null, AssignDaysOfYear),
                    new DateTimeFormatPartOptionTO(2, IsNumberDayOfYear, true, null, AssignDaysOfYear),
                    new DateTimeFormatPartOptionTO(1, IsNumberDayOfYear, true, null, AssignDaysOfYear)
                });

            DateTimeFormatsParts.Add("ww", new DateTimeFormatPartTO("ww", false, "Week of year: 09"));
            DateTimeFormatPartOptions.Add("ww",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberWeekOfYear, true, null, AssignWeeks),
                });

            DateTimeFormatsParts.Add("w", new DateTimeFormatPartTO("w", false, "Week of year: 9"));
            DateTimeFormatPartOptions.Add("w",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberWeekOfYear, true, null, AssignWeeks),
                    new DateTimeFormatPartOptionTO(1, IsNumberWeekOfYear, true, null, AssignWeeks),
                });

            DateTimeFormatsParts.Add("24h", new DateTimeFormatPartTO("24h", false, "Hours in 24 hour format: 15"));
            DateTimeFormatPartOptions.Add("24h",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumber24H, true, null, Assign24Hours)
                });

            DateTimeFormatsParts.Add("12h", new DateTimeFormatPartTO("12h", false, "Hours in 12 hour format: 3"));
            DateTimeFormatPartOptions.Add("12h",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumber12H, true, null, Assign12Hours),
                    new DateTimeFormatPartOptionTO(1, IsNumber12H, true, null, Assign12Hours),
                });

            DateTimeFormatsParts.Add("min", new DateTimeFormatPartTO("min", false, "Minutes: 30"));
            DateTimeFormatPartOptions.Add("min",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberMinutes, true, null, AssignMinutes),
                    new DateTimeFormatPartOptionTO(1, IsNumberMinutes, true, null, AssignMinutes),
                });

            DateTimeFormatsParts.Add("ss", new DateTimeFormatPartTO("ss", false, "Seconds: 29"));
            DateTimeFormatPartOptions.Add("ss",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberSeconds, true, null, AssignSeconds),
                    new DateTimeFormatPartOptionTO(1, IsNumberSeconds, true, null, AssignSeconds),
                });

            DateTimeFormatsParts.Add("sp", new DateTimeFormatPartTO("sp", false, "Split Seconds: 987"));
            DateTimeFormatPartOptions.Add("sp",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(3, IsNumberMilliseconds, true, null, AssignMilliseconds),
                    new DateTimeFormatPartOptionTO(2, IsNumberMilliseconds, true, null, AssignMilliseconds),
                    new DateTimeFormatPartOptionTO(1, IsNumberMilliseconds, true, null, AssignMilliseconds),
                });

            DateTimeFormatsParts.Add("am/pm", new DateTimeFormatPartTO("am/pm", false, "am or pm"));
            DateTimeFormatPartOptions.Add("am/pm",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(4, IsTextAmPm, false, null, AssignAmPm),
                    new DateTimeFormatPartOptionTO(3, IsTextAmPm, false, null, AssignAmPm),
                    new DateTimeFormatPartOptionTO(2, IsTextAmPm, false, null, AssignAmPm),
                });

            DateTimeFormatsParts.Add("Z",
                new DateTimeFormatPartTO("Z", false, "Time zone in short format: GMT (if available on the system)"));
            DateTimeFormatPartOptions.Add("Z", TimeZones.Select(k =>
            {
                IDateTimeFormatPartOptionTO dateTimeFormatPartOptionTo = new DateTimeFormatPartOptionTO(k.Key.Length,
                    IsTextTimeZone, false, null, AssignTimeZone);
                return dateTimeFormatPartOptionTo;
            }).OrderByDescending(k => k.Length).ToList());

            DateTimeFormatsParts.Add("ZZ", new DateTimeFormatPartTO("ZZ", false, "Time zone: Grenwich mean time"));
            DateTimeFormatPartOptions.Add("ZZ", TimeZones.Select(k =>
            {
                IDateTimeFormatPartOptionTO dateTimeFormatPartOptionTo = new DateTimeFormatPartOptionTO(k.Key.Length,
                    IsTextTimeZone, false, null, AssignTimeZone);
                return dateTimeFormatPartOptionTo;
            }).OrderByDescending(k => k.Length).ToList());

            DateTimeFormatsParts.Add("ZZZ", new DateTimeFormatPartTO("ZZZ", false, "Time zone offset: GMT + 02:00"));
            DateTimeFormatPartOptions.Add("ZZZ", TimeZones.Select(k =>
            {
                IDateTimeFormatPartOptionTO dateTimeFormatPartOptionTo = new DateTimeFormatPartOptionTO(k.Key.Length,
                    IsTextTimeZone, false, null, AssignTimeZone);
                return dateTimeFormatPartOptionTo;
            }).OrderByDescending(k => k.Length).ToList());

            DateTimeFormatsParts.Add("Era", new DateTimeFormatPartTO("Era", false, "A.D."));

            DateTimeFormatPartOptions.Add("era",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, (data, treatAsTim) => data.ToLower().Equals("ad"), false, "AD",
                        AssignEra)
                });

            DateTimeFormatPartOptions.Add("Era",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(3, (data, treatAsTim) => data.ToLower().Equals("a.d"), false, "A.D",
                        AssignEra)
                });

            DateTimeFormatPartOptions.Add("ERA",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(4, (data, treatAsTim) => data.ToLower().Equals("a.d."), false, "A.D.",
                        AssignEra)
                });
        }
        /// <summary>
        ///     Creates a list of all valid time format parts
        /// </summary>
        private static void CreateTimeFormatParts()
        {
            TimeFormatPartOptions.Add("yy",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsTextNumeric, true, null, AssignYears)
                });

            TimeFormatPartOptions.Add("yyyy",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(4, IsTextNumeric, true, null, AssignYears)
                });

            TimeFormatPartOptions.Add("mm",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberMonth, true, null, AssignMonths)
                });

            TimeFormatPartOptions.Add("m",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberMonth, true, null, AssignMonths),
                    new DateTimeFormatPartOptionTO(1, IsNumberMonth, true, null, AssignMonths),
                });

            TimeFormatPartOptions.Add("MM",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberMonth, true, null, AssignMonths)
                });

            TimeFormatPartOptions.Add("M",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberMonth, true, null, AssignMonths),
                    new DateTimeFormatPartOptionTO(1, IsNumberMonth, true, null, AssignMonths),
                });

            TimeFormatPartOptions.Add("d",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberDay, true, null, AssignDays),
                    new DateTimeFormatPartOptionTO(1, IsNumberDay, true, null, AssignDays)
                });

            TimeFormatPartOptions.Add("dd",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberDay, true, null, AssignDays)
                });

            TimeFormatPartOptions.Add("DW",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(1, IsNumberDayOfWeek, true, null, AssignDaysOfWeek),
                });

            TimeFormatPartOptions.Add("dW",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(1, IsNumberDayOfWeek, true, null, AssignDaysOfWeek),
                });

            TimeFormatPartOptions.Add("dw",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(1, IsNumberDayOfWeek, true, null, AssignDaysOfWeek),
                });

            TimeFormatPartOptions.Add("dy",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(3, IsNumberDayOfYear, true, null, AssignDaysOfYear),
                    new DateTimeFormatPartOptionTO(2, IsNumberDayOfYear, true, null, AssignDaysOfYear),
                    new DateTimeFormatPartOptionTO(1, IsNumberDayOfYear, true, null, AssignDaysOfYear)
                });

            TimeFormatPartOptions.Add("w",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberWeekOfYear, true, null, AssignWeeks),
                    new DateTimeFormatPartOptionTO(1, IsNumberWeekOfYear, true, null, AssignWeeks),
                });

            TimeFormatPartOptions.Add("24h",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumber24H, true, null, Assign24Hours)
                });

            TimeFormatPartOptions.Add("12h",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumber12H, true, null, Assign12Hours),
                    new DateTimeFormatPartOptionTO(1, IsNumber12H, true, null, Assign12Hours),
                });

            TimeFormatPartOptions.Add("min",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberMinutes, true, null, AssignMinutes),
                    new DateTimeFormatPartOptionTO(1, IsNumberMinutes, true, null, AssignMinutes),
                });

            TimeFormatPartOptions.Add("ss",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, IsNumberSeconds, true, null, AssignSeconds),
                    new DateTimeFormatPartOptionTO(1, IsNumberSeconds, true, null, AssignSeconds),
                });

            TimeFormatPartOptions.Add("sp",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(3, IsNumberMilliseconds, true, null, AssignMilliseconds),
                    new DateTimeFormatPartOptionTO(2, IsNumberMilliseconds, true, null, AssignMilliseconds),
                    new DateTimeFormatPartOptionTO(1, IsNumberMilliseconds, true, null, AssignMilliseconds),
                });

            TimeFormatPartOptions.Add("am/pm",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(4, IsTextAmPm, false, null, AssignAmPm),
                    new DateTimeFormatPartOptionTO(3, IsTextAmPm, false, null, AssignAmPm),
                    new DateTimeFormatPartOptionTO(2, IsTextAmPm, false, null, AssignAmPm),
                });

            TimeFormatPartOptions.Add("Z", TimeZones.Select(k =>
            {
                IDateTimeFormatPartOptionTO dateTimeFormatPartOptionTo = new DateTimeFormatPartOptionTO(k.Key.Length,
                    IsTextTimeZone, false, null, AssignTimeZone);
                return dateTimeFormatPartOptionTo;
            }).OrderByDescending(k => k.Length).ToList());

            TimeFormatPartOptions.Add("ZZ", TimeZones.Select(k =>
            {
                IDateTimeFormatPartOptionTO dateTimeFormatPartOptionTo = new DateTimeFormatPartOptionTO(k.Key.Length,
                    IsTextTimeZone, false, null, AssignTimeZone);
                return dateTimeFormatPartOptionTo;
            }).OrderByDescending(k => k.Length).ToList());

            TimeFormatPartOptions.Add("ZZZ", TimeZones.Select(k =>
            {
                IDateTimeFormatPartOptionTO dateTimeFormatPartOptionTo = new DateTimeFormatPartOptionTO(k.Key.Length,
                    IsTextTimeZone, false, null, AssignTimeZone);
                return dateTimeFormatPartOptionTo;
            }).OrderByDescending(k => k.Length).ToList());

            TimeFormatPartOptions.Add("era",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(2, (data, treatAsTim) => data.ToLower().Equals("ad"), false, "AD",
                        AssignEra)
                });

            TimeFormatPartOptions.Add("Era",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(3, (data, treatAsTim) => data.ToLower().Equals("a.d"), false, "A.D",
                        AssignEra)
                });

            TimeFormatPartOptions.Add("ERA",
                new List<IDateTimeFormatPartOptionTO>
                {
                    new DateTimeFormatPartOptionTO(4, (data, treatAsTim) => data.ToLower().Equals("a.d."), false, "A.D.",
                        AssignEra)
                });
        }