public static DynamicDateFormatInfo GetInstance(string calendarModelId, IFormatProvider provider = null)
        {
            if (provider == null)
            {
                provider = CultureInfo.CurrentCulture;
            }
            string cInfId = calendarModelId + "_" + provider.ToString();

            if (infoCacheS.ContainsKey(cInfId))
            {
                return(infoCacheS[cInfId]);
            }
            DateTimeFormatInfo x = DateTimeFormatInfo.GetInstance(provider);
            var inf = new DynamicDateFormatInfo(x);

            if (string.IsNullOrEmpty(calendarModelId))
            {
                return((DynamicDateFormatInfo)inf.Clone());
            }

            var model = DynamicCalendarModel.GetCachedModel(calendarModelId);

            if (model != null && model.FormatInfo != null)
            {
                inf.CalendarModelID = calendarModelId;

                var mi = model.FormatInfo;
                inf.Import(mi);
            }

            return(inf);
        }
예제 #2
0
        // Expand a pre-defined format string (like "D" for long date) to the real format that
        // we are going to use in the date time parsing.
        // This method also convert the dateTime if necessary (e.g. when the format is in Universal time),
        // and change ddfi if necessary (e.g. when the format should use invariant culture).
        //
        private static String ExpandPredefinedFormat(String format, ref DynamicDateFormatInfo ddfi)
        {
            switch (format[0])
            {
            case 'o':
            case 'O':           // Round trip format
                ddfi = DynamicDateFormatInfo.InvariantInfo;
                break;

            case 'r':
            case 'R':           // RFC 1123 Standard
                ddfi = DynamicDateFormatInfo.InvariantInfo;
                break;

            case 's':           // Sortable without Time Zone Info
                ddfi = DynamicDateFormatInfo.InvariantInfo;
                break;

            case 'u':           // Universal time in sortable format.
                ddfi = DynamicDateFormatInfo.InvariantInfo;
                break;

            case 'U':           // Universal time in culture dependent format.
                // Universal time is always in Greogrian calendar.
                //
                // Change the Calendar to be Gregorian Calendar.
                //
                ddfi = (DynamicDateFormatInfo)ddfi.Clone();
                //if (ddfi.Calendar.GetType() != typeof(GregorianCalendar))
                {
                    //ddfi.Calendar = GregorianCalendar.GetDefaultInstance();
                }
                break;
            }
            format = GetRealFormat(format, ddfi);
            return(format);
        }