【问题标题】:System.Globalization.DateTimeFormatInfo.calendar cause throw an exceptionSystem.Globalization.DateTimeFormatInfo.calendar 导致抛出异常
【发布时间】:2012-07-09 11:36:38
【问题描述】:

我使用此代码在 .Net3.5 中将我的文化更改为波斯文化:

if (CultureInfo.CurrentCulture.ToString() == "fa-IR")
        {
            CultureInfo persianCalture = new CultureInfo("fa-IR");
            DateTimeFormatInfo info = persianCalture.DateTimeFormat;
            info.AbbreviatedDayNames = new string[] { "  ی  ", "  د  ", "  س  ", "  چ  ", "  پ  ", "  ج  ", "  ش  " };
            info.DayNames = new string[] { "يکشنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
            info.AbbreviatedMonthNames = new string[] { "فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
            info.MonthNames = new string[] { "فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
            info.AbbreviatedMonthGenitiveNames = new string[] { "فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
            info.AMDesignator = "صبح";
            info.PMDesignator = "عصر";
            info.ShortDatePattern = "yyyy/MM/dd";
            info.FullDateTimePattern = "yyyy/MM/dd hh:mm:ss";
            info.LongDatePattern = "yyyy MMMM dd dddd";
            info.FirstDayOfWeek = DayOfWeek.Saturday;
            persianCalture.DateTimeFormat = info;
            PersianCalendar PersianCal = new PersianCalendar();

            typeof(DateTimeFormatInfo).GetField("calendar", (System.Reflection.BindingFlags.NonPublic | (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))).SetValue(info, PersianCal);
            typeof(CultureInfo).GetField("calendar", (System.Reflection.BindingFlags.NonPublic | (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))).SetValue(persianCalture, PersianCal);
            Thread.CurrentThread.CurrentCulture = persianCalture;
            Thread.CurrentThread.CurrentUICulture = persianCalture;
            CultureInfo.CurrentCulture.DateTimeFormat = info;
            CultureInfo.CurrentUICulture.DateTimeFormat = info;
        }

但下面一行会抛出 ArgumentNullException :

System.Globalization.DateTimeFormatInfo.calendar

        typeof(DateTimeFormatInfo).GetField("calendar", (System.Reflection.BindingFlags.NonPublic | (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))).SetValue(info, PersianCal);
        typeof(CultureInfo).GetField("calendar", (System.Reflection.BindingFlags.NonPublic | (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))).SetValue(persianCalture, PersianCal);

有人知道为什么会抛出这个异常吗?

感谢您提供的任何帮助。

【问题讨论】:

    标签: asp.net .net


    【解决方案1】:

    尝试使用:typeof(DateTimeFormatInfo).GetProperty("Calendar"....)

    DateTimeFormatInfo 有一个 Calendar 属性(大写 C)。

    希望这会有所帮助,

    夏。

    【讨论】:

      猜你喜欢
      • 2016-01-06
      • 2019-06-18
      • 2010-09-14
      • 2013-03-25
      • 2015-07-09
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多