تبدیل تاریخ میلادی به شمسی در C#
در طراحی های سیستم های اطلاعاتی که زبان فارسی را پشتیبانی میکنند نیاز داریم تا تمامی تاریخ ها رو به شمسی تبدیل کنیم. و از طرف دیگه نیز Format تاریخ شمسی تبدیل شده برای ما نیز مهم است. به طور مثال میخواهیم آن را به صورت yyyy/MM/dd نمایش دهیم.
در ادامه این نوشته ما تابعی را به صورت Static و از نوع Extension Method تهیه شده است که میتوان برای تمامی متغیرهایی که از جنس DateTime هستند استفاده کرد.
public static class PersianDateExtensionMethods
{
private static CultureInfo _culture;
public static CultureInfo GetPersianCulture()
{
if (_culture != null)
return _culture;
_culture = new CultureInfo("fa-IR");
var formatInfo = _culture.DateTimeFormat;
formatInfo.AbbreviatedDayNames = new[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
formatInfo.DayNames = new[] { "یکشنبه", "دوشنبه", "سه شنبه", "چهار شنبه", "پنجشنبه", "جمعه", "شنبه" };
var monthNames = new[]
{
"فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن",
"اسفند",
""
};
formatInfo.AbbreviatedMonthNames =
formatInfo.MonthNames =
formatInfo.MonthGenitiveNames = formatInfo.AbbreviatedMonthGenitiveNames = monthNames;
formatInfo.AMDesignator = "ق.ظ";
formatInfo.PMDesignator = "ب.ظ";
formatInfo.ShortDatePattern = "yyyy/MM/dd";
formatInfo.LongDatePattern = "dddd, dd MMMM,yyyy";
formatInfo.FirstDayOfWeek = DayOfWeek.Saturday;
Calendar cal = new PersianCalendar();
var fieldInfo = _culture.GetType().GetField("calendar", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldInfo != null)
fieldInfo.SetValue(_culture, cal);
var info = formatInfo.GetType().GetField("calendar", BindingFlags.NonPublic | BindingFlags.Instance);
if (info != null)
info.SetValue(formatInfo, cal);
_culture.NumberFormat.NumberDecimalSeparator = "/";
_culture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational;
_culture.NumberFormat.NumberNegativePattern = 0;
return _culture;
}
public static string ToPersianString(this DateTime date, string format = "yyyy/MM/dd")
{
return date.ToString(format, GetPersianCulture());
}
View نحوه استفاده از کد مورد نظر در قسمت
@item.CreatedOn.ToPersianString("dddd yyyy/M/d")
ناهید حسین زاده
پنجشنبه ۱۳۹۷/۳/۳خیلی کاربردیه👌👌👌👌👍👍👍👍 ممنون