不是给定 culture.parameter 名称的有效日历:

DataGridView我在将日期显示为波斯日历时遇到问题。使用此代码后:


using System.Globalization;

using System.Threading;


...


CultureInfo info = new CultureInfo("fa-Ir")

{

    DateTimeFormat = {Calendar = new PersianCalendar()}

};


Thread.CurrentThread.CurrentCulture = info;

我的问题已解决,我的 PC 或笔记本电脑都没有问题,都是 Windows 10 和.netFramwork 4.8


我的装有 Windows 7 的客户 PC 只有 Culture 有问题。这是为什么?


异常消息: 不是给定区域性的有效日历。参数名称:值


炎炎设计
浏览 101回答 2
2回答

汪汪一只猫

根据 Rasool Aghajani 的回答,我实现了一个新的 CultureInfo 类,您可以将其设置为应用程序的默认文化,并且所有日期时间都将采用波斯文化格式。using System;using System.Globalization;using System.Reflection;namespace SomeNamespace{    public class PersianCulture : CultureInfo    {        public PersianCulture() : base("fa-IR")        {            if (this.Calendar is PersianCalendar)                return;            //do hack here to set the default culture's calendar to PersianCalender on OS versions that are not supporting PersianCalendar as default culture calendar            var dateTimeFormat = this.DateTimeFormat;            dateTimeFormat.AMDesignator = "قبل‌ازظهر";            dateTimeFormat.AbbreviatedDayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };            dateTimeFormat.AbbreviatedMonthGenitiveNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };            dateTimeFormat.AbbreviatedMonthNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };            dateTimeFormat.CalendarWeekRule = CalendarWeekRule.FirstDay;            dateTimeFormat.DateSeparator = "/";            dateTimeFormat.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };            dateTimeFormat.FirstDayOfWeek = DayOfWeek.Saturday;            dateTimeFormat.FullDateTimePattern = "yyyy MMMM d, dddd H:mm:ss";            dateTimeFormat.LongDatePattern = "yyyy MMMM d, dddd";            dateTimeFormat.LongTimePattern = "H:mm:ss";            dateTimeFormat.MonthDayPattern = "MMMM d";            dateTimeFormat.MonthGenitiveNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };            dateTimeFormat.MonthNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };            dateTimeFormat.PMDesignator = "بعدازظهر";            dateTimeFormat.ShortDatePattern = "yyyy/M/d";            dateTimeFormat.ShortTimePattern = "H:mm";            dateTimeFormat.ShortestDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };            dateTimeFormat.TimeSeparator = ":";            dateTimeFormat.YearMonthPattern = "yyyy MMMM";            var persianCalendar = new PersianCalendar();            var dateTimeFormatInfoCalendar = typeof(DateTimeFormatInfo).GetField("calendar", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);            dateTimeFormatInfoCalendar?.SetValue(dateTimeFormat, persianCalendar);            var cultureTableRecord = typeof(DateTimeFormatInfo).GetField("m_cultureTableRecord", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);            if (cultureTableRecord != null)            {                var dateTimeFormatValue = cultureTableRecord.GetValue(dateTimeFormat);                var useCurrentCalendarMethodInfo = dateTimeFormatValue.GetType().GetMethod("UseCurrentCalendar", BindingFlags.NonPublic | BindingFlags.Instance);                if (                    useCurrentCalendarMethodInfo !=                    null)                {                    var persianCalendarIdPropertyInfo = persianCalendar.GetType().GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic);                    if (                        persianCalendarIdPropertyInfo !=                        null)                        useCurrentCalendarMethodInfo.Invoke(dateTimeFormatValue, new object[] { persianCalendarIdPropertyInfo.GetValue(persianCalendar, null) });                }            }            var cultureCalendar = typeof(CultureInfo).GetField("calendar", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);            cultureCalendar?.SetValue(this, persianCalendar);            this.DateTimeFormat = dateTimeFormat;        }    }}

幕布斯7119047

我确实用这个替换了我的旧代码:        System.Globalization.CultureInfo calture = new System.Globalization.CultureInfo("fa-Ir");        System.Globalization.DateTimeFormatInfo info = calture.DateTimeFormat;        info.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };        info.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };        info.AbbreviatedMonthNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };        info.MonthNames = new string[] { "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };        info.AMDesignator = "ق.ظ";        info.PMDesignator = "ب.ظ";        info.ShortDatePattern = "yyyy/MM/dd";        info.FirstDayOfWeek = DayOfWeek.Saturday;        System.Globalization.PersianCalendar cal = new System.Globalization.PersianCalendar();        var field = typeof(System.Globalization.DateTimeFormatInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);        field?.SetValue(info, cal);        var fieldInfo = typeof(System.Globalization.DateTimeFormatInfo).GetField("m_cultureTableRecord", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);        if (fieldInfo != null)        {            object obj = fieldInfo.GetValue(info);            var methodInfo = obj.GetType().GetMethod("UseCurrentCalendar", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);            if (                methodInfo !=                null)            {                var propertyInfo = cal.GetType().GetProperty("ID", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);                if (                    propertyInfo !=                    null)                    methodInfo.Invoke(obj, new object[] { propertyInfo.GetValue(cal, null) });            }        }        var field1 = typeof(System.Globalization.CultureInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);        field1?.SetValue(calture, cal);        var fieldInfo1 = typeof(System.Globalization.CultureInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);        fieldInfo1?.SetValue(calture, cal);        System.Threading.Thread.CurrentThread.CurrentCulture = calture;        System.Threading.Thread.CurrentThread.CurrentUICulture = calture;        System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat = info;        System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat = info;它在所有计算机上都工作得很好......但我不知道......如果某些代码是真的应该在所有计算机上工作!否则如果有问题不应该在任何计算机上工作......
打开App,查看更多内容
随时随地看视频慕课网APP