PDA

View Full Version : مشکل در نمایش شمسی تاریخ در .Net 4



wild_honey
جمعه 18 تیر 1389, 10:58 صبح
سلام دوستان
من یه متدی دارم برای فارسی نمایش دادن تاریخ هام در واقع برای اینکه کالچر فارسی رو به دات نت معرفی بکنیم که تا الان که دات نت 3.5 کار میکردم باهاش به مشکل بر نمیخوردم
ولی توی دات نت 4 ازم تو استفاده از این متد ایراد میگیره و ارور
Object reference not set to an instance of an object.
میده !

کد متد ام هم این هستش


public static void SetCalendar(string LangID, string culture)
{

System.Globalization.CultureInfo calture = new System.Globalization.CultureInfo(LangID);
System.Globalization.DateTimeFormatInfo info = calture.DateTimeFormat;
string ClassName = "System.Globalization.";
ClassName += (culture);
Type theType = System.Type.GetType(ClassName);
object theObject = Activator.CreateInstance(theType);
System.Globalization.Calendar cal = (System.Globalization.Calendar)Activator.CreateIns tance(theType, null);
typeof(System.Globalization.DateTimeFormatInfo).Ge tField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue (info, cal);
object obj = typeof(System.Globalization.DateTimeFormatInfo).Ge tField("m_cultureTableRecord", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue (info);
obj.GetType().GetMethod("UseCurrentCalendar", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Invoke(ob j, new object[] { cal.GetType().GetProperty("ID", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue (cal, null) });
typeof(System.Globalization.CultureInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue (calture, cal);
typeof(System.Globalization.CultureInfo).GetField("calendar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue (calture, cal);
System.Threading.Thread.CurrentThread.CurrentCultu re = calture;
System.Threading.Thread.CurrentThread.CurrentUICul ture = calture;
System.Globalization.CultureInfo.CurrentCulture.Da teTimeFormat = info;
System.Globalization.CultureInfo.CurrentUICulture. DateTimeFormat = info;
if (LangID == "fa-IR")
{
// info.AbbreviatedDayNames = new string[] { "ي", "د", "س", "چ", "پ", "ج", "ش" };
info.AbbreviatedDayNames = new string[] { "يکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
info.DayNames = new string[] { "يکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
info.AbbreviatedMonthNames = new string[] { "فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دي", "بهمن", "اسفند", "" };
info.MonthNames = new string[] { "فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دي", "بهمن", "اسفند", "" };
info.ShortestDayNames = new string[] { "يکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
info.AMDesignator = "ق.ظ";
info.PMDesignator = "ب.ظ";
info.ShortDatePattern = "yyyy/MM/dd"; //turn into this (CHANGE 1388/01/22)
//info.ShortDatePattern = "dd/MM/yyyy";
info.FirstDayOfWeek = DayOfWeek.Saturday;

}

}


احتمالا توی دات نت 4 باید به یه شکل دیگه ای از این روش استفاده کرد
اگه کسی اطلاع داره ما رو هم تو جریان بذاره
ممنون