نمایش تاریخ شمسی در asp.net

نمایش تاریخ شمسی همیشه یکی از امکاناتی است که ما مردمان پارسی باید در پروژه استفاده کنیم ، البته در نظر بگیریم که ما فقط باید در هنگام نمایش تاریخ را به صورت شمسی نمایش دهیم ، اطلاعات ما در دیتابیس باید به صورت میلادی ذخیره شده باشد به دلایلی که در ادامه باهم برسی میکنیم.اول اینکه ما از کلاس PersianCulture استفاده میکنیم ، این کلاس در زبان سی شارپ استفاده میشه یعنی شما میتوانید در ASP.NET و ASP.NET MVC و یا در پروژه های ویندوز فرم از این کلاس استفاده کنید.
تاریخ شمسی

چه دلایلی اینجا حکم فرماست که ما باید از تاریخ شمسی در دیتابیس استفاده نکنیم ؟

دلیل محکمی که میتونم براتون توضیح بدم ساعت و تاریخ ویندوز است ، و یا سرور ما : درسته ؟ این سیستم ها تاریخ را به صورت میلادی ارائه میدهند خوب ماهم باید طبق همین سیستم جلو بریم ولی توسط این کلاس میتوانیم تاریخ را در هنگام نمایش به صورت شمسی داشته باشیم.

دوم اینکه فرض کنید میخواهید در یک بازه زمانی جستجو انجام دهید ؟ مثلا اطلاعات خرید امروز ؟ میشه از تاریخ جاری سیستم از ساعت ۰۰:۰۰ تا ۲۳:۵۹ دقیقه ، خوب تاریخ سیستم میلادی است اگر اطلاعات ما به صورت شمسی در دیتابیس ثبت شده بود این کار امکان پذیر نبود و خیلی دلایل دیگه که میشه در موردش بحث کرد.

میریم سراغ آموزش:

ابتدا باید کلاسی که ضمیمه شده را به پروژه خود اضافه کنید.کدش رو نیز براتون قرار دادم :

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

namespace GSD.Globalization
{
    ///
<summary>
    /// <Publisher>http://www.csharpoop.com</Publisher>
    /// <Author></Author>
    /// </summary>

    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; }
        }
    }
}

قرار دادن کد های زیر با توجه به تکنولوژی که استفاده میکنید :

ASP.NET:

در ASP.NET کد زیر را در Global.cs قرار بدید :

ابتدا باید کلاس را به پروژه خود اضافه کنید در غیر این صورت کد زیر کار نخواهد کرد.

 protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var persianCulture = new PersianCulture();
            Thread.CurrentThread.CurrentCulture = persianCulture;
            Thread.CurrentThread.CurrentUICulture = persianCulture;
        }

 در ویندوز فرم زبان سی شارپ :

کد زیر را در Program.cs قرار بدید :

var persianCulture = new PersianCulture();
            Thread.CurrentThread.CurrentCulture = persianCulture;
            Thread.CurrentThread.CurrentUICulture = persianCulture;

 اگر همه کارهایی که آموزش داده شد را درست انجام داده باشید باید تاریخ را شمسی در پروژه مشاهده کنید.حال میخواهیم طبق آموزشی که در خوده کلاس نیز داده شده تاریخ ها را به صورت بهینه نمایش دهیم.

نمایش فقط تاریخ :

DateTime.Now.ToString("yyyy/MM/dd");

 نمایش فقط ساعت :

DateTime.Now.ToString("HH:mm");

 

دانلود سورس کد
پسورد : csharpoop.com
پیش نمایش

نمایش تاریخ شمسی در asp.net
امتیاز دهید

(416 نوشته)

C# Programmer , Web Design And Developer , MVC , ASP.NET

فکر شما چیست؟

آدرس ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند *

حاصل جمع اعداد را وارد کنید : *