سلام
دوستان برای استفاده از تقویم فارسی در Winform و وب فرم و MVC من قبلا از کلاس زیر استفاده می کردم :
using System; using System.Collections.Generic; using System.Globalization; using System.Reflection; namespace GSD.Globalization { 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> /// <remarks>لطفا در هنگام استفاده به سايت سايان اشاره كنيد.</remarks> 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; } } } }
این کد بدون مشکل کار می کنه و برای فرا خوانی فقط کافیه دستورات زیر را در StartUp قرار بدین:
var persianCulture = new PersianCulture(); Thread.CurrentThread.CurrentCulture = persianCulture; Thread.CurrentThread.CurrentUICulture = persianCulture;
اما در WPF کار نمی کنه
کسی می دونه چرا؟؟؟؟؟؟؟؟؟؟
با این روش تاریخ جاری سیستم شمسی میشه اما Calender کاملا شمسی نمیشه
یعنی روز اول هفته شنبه میشه و اعداد فارسی میشن اما ماهها و سال لود شده هنوز میلادی هست
textBox.Text = DateTime.Now.ToShortDateString();
برای تقویم فارسی از WpfToolkit استفاده کنید ، سورس نمونه پروژه را براتون می فرستم.
ممنونم از پاسختون.
کامپوننت خیلی خوبیه
میشه بفرمایید در زمانهایی که لازمه تاریخ بصورت DateTime در دیتابیس ذخیره بشه (میلادی چون برای محدوده تاریخ شمسی SQL Server ارور میده) چطور باید در تلریک تاریخ شمسی نمایش داد.
البته من با تابع تاریخ را تبدیل کردم و تو دیتا تیبل ریختم و ItemSource گرید را بهش وصل کردم. نمایش میده اما BindID کلید تیبل انجام نمیشه
ممنونم
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)