با سلام
ذخيره تاريخ در ديتابيس به صورت ميلادي و فراخواني و نمايش به صورت شمسي
ميخواستم بدونم چطوري ميشه اين مورد رو پياده سازي كرد . يعني به صورت اتوماتيك تاريخي شمسي كه كاربر انتخاب كرده زمان ذخيره توي ديتابيس به صورت ميلادي ذخيره بشه و برعكس موقع خوندن وقتي كه ميلادي ذخيره شده شمسي فراخواني و نمايش داده بشه .
يعني كلان رو نوع DateTime حساس باشه .
میتونید از کلاس زیر استفاده کنید
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; } } } }
بعد رویداد زیر رو به Global اضافه کنید
protected void Application_BeginRequest(object sender, EventArgs e) { var persianCulture = new PersianCulture(); Thread.CurrentThread.CurrentCulture = persianCulture; Thread.CurrentThread.CurrentUICulture = persianCulture; }
ممنونم آقاي مدائني عزيز
پيشنهاد شما براي استفاده انواع DateTime چيه ؟
DateTime يا datetime2(7) يا datetimeoffset(7)
من از DateTime استفاده میکنم
سلام آقاي مدائني عزيز
اين كلاس با كامپوننت FADatePicker تداخل دارن . البته تويه Winform . تداخلشون هم به اين صورته كه وقتي تاريخ رو توي picker انتخاب ميكني و ميري روي آبجكت ديگه اي توي صفحه تاريخ توي picker ميلادي ميشه ! وقتي كه Culture رو به fa-IR تغيير ميدي مشكل برطرف ميشه اما اين راه حل مشكلاتي رو ايجاد ميكنه تو كدهام .
شما راه حلي براي اين مشكل دارين ؟
جايگزين مناسبتري براي FADatePicker دارين ؟
ممنونم .
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)