Exemplo n.º 1
0
        /// <summary>
        /// CreateDateTimeFormatInfo creates a .NET DateTimeFormatInfo for the CLDR Culture
        /// </summary>
        /// <param name="culture">The Culture to get the DateTimeFormatInfo for</param>
        /// <returns>A .NET DateTimeFormatInfo for the CLDR Culture</returns>
        private static DateTimeFormatInfo CreateDateTimeFormatInfo(Culture culture)
        {
            System.Globalization.Calendar calendar           = new GregorianCalendar(GregorianCalendarTypes.Localized);
            DateTimeFormatInfo            dateTimeFormatInfo = new DateTimeFormatInfo();

            dateTimeFormatInfo.Calendar = calendar;

            if (culture.Dates != null && culture.Dates.Calendars != null)
            {
                Types.Calendar gregorianCalendar = (from c in culture.Dates.Calendars
                                                    where string.Compare(c.Id, "gregorian", StringComparison.InvariantCulture) == 0
                                                    select c).FirstOrDefault();
                if (gregorianCalendar != null)
                {
                    if (gregorianCalendar.AbbreviatedDayNames != null && gregorianCalendar.AbbreviatedDayNames.GetLength(0) == 7)
                    {
                        dateTimeFormatInfo.AbbreviatedDayNames = gregorianCalendar.AbbreviatedDayNames;
                    }

                    if (gregorianCalendar.DayNames != null && gregorianCalendar.DayNames.GetLength(0) == 7)
                    {
                        dateTimeFormatInfo.DayNames = gregorianCalendar.DayNames;
                    }

                    if (gregorianCalendar.ShortestDayNames != null && gregorianCalendar.ShortestDayNames.GetLength(0) == 7)
                    {
                        dateTimeFormatInfo.ShortestDayNames = gregorianCalendar.ShortestDayNames;
                    }

                    if (gregorianCalendar.AbbreviatedMonthNames != null)
                    {
                        dateTimeFormatInfo.AbbreviatedMonthNames = gregorianCalendar.AbbreviatedMonthNames;
                    }

                    if (gregorianCalendar.AbbreviatedMonthGenitiveNames != null)
                    {
                        dateTimeFormatInfo.AbbreviatedMonthGenitiveNames = gregorianCalendar.AbbreviatedMonthGenitiveNames;
                    }

                    if (gregorianCalendar.MonthNames != null)
                    {
                        dateTimeFormatInfo.MonthNames = gregorianCalendar.MonthNames;
                    }

                    if (gregorianCalendar.MonthGenitiveNames != null)
                    {
                        dateTimeFormatInfo.MonthGenitiveNames = gregorianCalendar.MonthGenitiveNames;
                    }

                    if (!string.IsNullOrEmpty(gregorianCalendar.AMDesignator))
                    {
                        // AMDesignator must be 14 characters or less
                        string amDesignator = gregorianCalendar.AMDesignator;
                        dateTimeFormatInfo.AMDesignator = amDesignator.Substring(0, Math.Min(amDesignator.Length, 14));
                    }

                    if (!string.IsNullOrEmpty(gregorianCalendar.PMDesignator))
                    {
                        // PMDesignator must be 14 characters or less
                        string pmDesignator = gregorianCalendar.PMDesignator;
                        dateTimeFormatInfo.PMDesignator = pmDesignator.Substring(0, Math.Min(pmDesignator.Length, 14));
                    }

                    dateTimeFormatInfo.CalendarWeekRule = CalendarWeekRule.FirstDay;

                    if (culture.Identity.Region != null)
                    {
                        dateTimeFormatInfo.FirstDayOfWeek = RegionExtensions.GetFirstDayOfWeek(culture.Identity.Region.Id);
                    }
                    else
                    {
                        dateTimeFormatInfo.FirstDayOfWeek = RegionExtensions.GetFirstDayOfWeek(NCldr.RegionIdForTheWorld);
                    }

                    if (!string.IsNullOrEmpty(gregorianCalendar.FullDotNetDatePattern))
                    {
                        // dateTimeFormatInfo.FullDateTimePattern = "dd MMMM yyyy HH:mm:ss";
                        dateTimeFormatInfo.FullDateTimePattern = gregorianCalendar.FullDotNetDatePattern;
                    }

                    if (!string.IsNullOrEmpty(gregorianCalendar.LongDotNetDatePattern))
                    {
                        // dateTimeFormatInfo.LongDatePattern = "dd MMMM yyyy";
                        // dateTimeFormatInfo.MonthDayPattern = "dd MMMM";
                        // dateTimeFormatInfo.YearMonthPattern = "MMMM, yyyy";
                        dateTimeFormatInfo.LongDatePattern = gregorianCalendar.LongDotNetDatePattern;

                        // CLDR does not have a month day pattern so make one by stripping out the year from the long date format
                        dateTimeFormatInfo.MonthDayPattern =
                            dateTimeFormatInfo.LongDatePattern.Replace("y", string.Empty);

                        // CLDR does not have a year month pattern so make one by stripping out the day from the long date format
                        dateTimeFormatInfo.YearMonthPattern =
                            dateTimeFormatInfo.LongDatePattern.Replace("d", string.Empty);
                    }

                    if (!string.IsNullOrEmpty(gregorianCalendar.ShortDotNetDatePattern))
                    {
                        // dateTimeFormatInfo.ShortDatePattern = "dd-MM-yyyy";
                        dateTimeFormatInfo.ShortDatePattern = gregorianCalendar.ShortDotNetDatePattern;
                    }

                    if (!string.IsNullOrEmpty(gregorianCalendar.LongDotNetTimePattern))
                    {
                        // dateTimeFormatInfo.LongTimePattern = "HH:mm:ss";
                        dateTimeFormatInfo.LongTimePattern = gregorianCalendar.LongDotNetTimePattern;
                    }

                    if (!string.IsNullOrEmpty(gregorianCalendar.ShortDotNetTimePattern))
                    {
                        // dateTimeFormatInfo.ShortTimePattern = "HH:mm";
                        dateTimeFormatInfo.ShortTimePattern = gregorianCalendar.ShortDotNetTimePattern;
                    }

                    dateTimeFormatInfo.DateSeparator = gregorianCalendar.DateSeparator;
                    dateTimeFormatInfo.TimeSeparator = gregorianCalendar.TimeSeparator;
                }
            }

            return(dateTimeFormatInfo);
        }
Exemplo n.º 2
0
        /// <summary>
        /// GetCalendar returns a .NET Calendar equivalent to a CLDR Calendar
        /// </summary>
        /// <param name="calendar">A CLDR Calendar</param>
        /// <returns>A .NET Calendar</returns>
        private static System.Globalization.Calendar GetCalendar(Types.Calendar calendar)
        {
            System.Globalization.Calendar dotNetCalendar = null;

            if (string.Compare(calendar.Id, "gregorian", StringComparison.InvariantCulture) == 0 && calendar.CalendarType.CalendarAlgorithmType == CalendarAlgorithmType.SolarCalendar)
            {
                dotNetCalendar = new GregorianCalendar();
            }
            else if (string.Compare(calendar.Id, "japanese", StringComparison.InvariantCulture) == 0)
            {
                if (calendar.CalendarType.CalendarAlgorithmType == CalendarAlgorithmType.SolarCalendar)
                {
                    dotNetCalendar = new JapaneseCalendar();
                }
                else if (calendar.CalendarType.CalendarAlgorithmType == CalendarAlgorithmType.LunisolarCalendar)
                {
                    dotNetCalendar = new JapaneseLunisolarCalendar();
                }
            }
            else if (string.Compare(calendar.Id, "islamic-civil", StringComparison.InvariantCulture) == 0 &&
                     calendar.CalendarType.CalendarAlgorithmType == CalendarAlgorithmType.LunisolarCalendar)
            {
                dotNetCalendar = new HijriCalendar();
            }
            else if (string.Compare(calendar.Id, "islamic", StringComparison.InvariantCulture) == 0 &&
                     calendar.CalendarType.CalendarAlgorithmType == CalendarAlgorithmType.LunisolarCalendar)
            {
                dotNetCalendar = new HijriCalendar();
            }
            else if (string.Compare(calendar.Id, "chinese", StringComparison.InvariantCulture) == 0 &&
                     calendar.CalendarType.CalendarAlgorithmType == CalendarAlgorithmType.LunisolarCalendar)
            {
                dotNetCalendar = new ChineseLunisolarCalendar();
            }
            else if (string.Compare(calendar.Id, "hebrew", StringComparison.InvariantCulture) == 0 &&
                     calendar.CalendarType.CalendarAlgorithmType == CalendarAlgorithmType.LunisolarCalendar)
            {
                dotNetCalendar = new HebrewCalendar();
            }
            else if (string.Compare(calendar.Id, "buddhist", StringComparison.InvariantCulture) == 0 &&
                     calendar.CalendarType.CalendarAlgorithmType == CalendarAlgorithmType.SolarCalendar)
            {
                dotNetCalendar = new ThaiBuddhistCalendar();
            }
            else if (string.Compare(calendar.Id, "coptic", StringComparison.InvariantCulture) == 0)
            {
                return(null);
            }
            else if (string.Compare(calendar.Id, "persian", StringComparison.InvariantCulture) == 0 &&
                     calendar.CalendarType.CalendarAlgorithmType == CalendarAlgorithmType.SolarCalendar)
            {
                return(new PersianCalendar());
            }
            else if (string.Compare(calendar.Id, "ethiopic", StringComparison.InvariantCulture) == 0)
            {
                return(null);
            }
            else if (string.Compare(calendar.Id, "indian", StringComparison.InvariantCulture) == 0)
            {
                return(null);
            }
            else if (string.Compare(calendar.Id, "roc", StringComparison.InvariantCulture) == 0)
            {
                return(null);
            }

            return(dotNetCalendar);
        }