نمایش تاریخ فارسی
یکشنبه 4 مرداد 1394نمایش تاریخ فارسی همه فیلدهای از نوع تاریخ انگلیسی به سریعترین روش ممکن
سریع ترین و راحت ترین روش نمایش تاریخ های فارسی در گریدها و ... بدون نیاز به dll:
ابتدا فایل ضمیمه (PersianCulture.cs) را دانلود کرده و به پروژه خود اضافه کنید
متن فایل:
using System; using System.Collections.Generic; using System.Globalization; using System.Reflection; namespace DisplayPersianDateInMVC5.Infrastructure { public class PersianCulture : CultureInfo { private readonly Calendar cal; private readonly Calendar[] optionals; /// <summary> /// </summary> /// <param name="cultureName">fa-IR</param> /// <param name="useUserOverride">true</param> public PersianCulture() : this("fa-IR", true) { } public PersianCulture(string cultureName, bool useUserOverride) : base(cultureName, useUserOverride) { //Temporary Value for cal. cal = base.OptionalCalendars[0]; //populating new list of optional calendars. var optionalCalendars = new List<Calendar>(); optionalCalendars.AddRange(base.OptionalCalendars); optionalCalendars.Insert(0, new PersianCalendar()); Type formatType = typeof(DateTimeFormatInfo); Type calendarType = typeof(Calendar); PropertyInfo idProperty = calendarType.GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic); FieldInfo optionalCalendarfield = formatType.GetField("optionalCalendars", BindingFlags.Instance | BindingFlags.NonPublic); //populating new list of optional calendar ids var newOptionalCalendarIDs = new Int32[optionalCalendars.Count]; for (int i = 0; i < newOptionalCalendarIDs.Length; i++) newOptionalCalendarIDs[i] = (Int32)idProperty.GetValue(optionalCalendars[i], null); optionalCalendarfield.SetValue(DateTimeFormat, newOptionalCalendarIDs); optionals = optionalCalendars.ToArray(); cal = optionals[0]; DateTimeFormat.Calendar = optionals[0]; DateTimeFormat.MonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.MonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.AbbreviatedMonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.AbbreviatedMonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" }; DateTimeFormat.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" }; DateTimeFormat.ShortestDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" }; DateTimeFormat.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" }; DateTimeFormat.AMDesignator = "ق.ظ"; DateTimeFormat.PMDesignator = "ب.ظ"; DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"; DateTimeFormat.LongDatePattern = "yyyy/MM/dd"; DateTimeFormat.SetAllDateTimePatterns(new[] { "yyyy/MM/dd" }, 'd'); DateTimeFormat.SetAllDateTimePatterns(new[] { "dddd, dd MMMM yyyy" }, 'D'); DateTimeFormat.SetAllDateTimePatterns(new[] { "yyyy MMMM" }, 'y'); DateTimeFormat.SetAllDateTimePatterns(new[] { "yyyy MMMM" }, 'Y'); } public override Calendar Calendar { get { return cal; } } public override Calendar[] OptionalCalendars { get { return optionals; } } } }
سپس به فایل Global.asax بروید و کد زیر را به آن اضافه کنید.
using DisplayPersianDateInMVC5.Infrastructure; using System.Threading; protected void Application_BeginRequest(object sender, EventArgs e) { var persianCulture = new PersianCulture(); persianCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"; persianCulture.DateTimeFormat.LongDatePattern = "dddd d MMMM yyyy"; persianCulture.DateTimeFormat.AMDesignator = "صبح"; persianCulture.DateTimeFormat.PMDesignator = "عصر"; Thread.CurrentThread.CurrentCulture = persianCulture; Thread.CurrentThread.CurrentUICulture = persianCulture; }
حال اگر هر جای برنامه شما تاریخ به صورتی میلادی باشد هنگام نمایش به صورتی هجری شمسی نمایش داده خواهد شد.
- ASP.net MVC
- 4k بازدید
- 15 تشکر