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); }
// 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); }