"> نمایش تاریخ شمسی در asp.net + فیلم آموزشی

نمایش تاریخ شمسی در asp.net + فیلم آموزشی

تاریخ شمسی

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

تاریخ شمسی

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

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

[divider style=”normal” top=”20″ bottom=”20″] [box type=”shadow” align=”” class=”” width=””]

پیشنهاد میکنم : نمونه datepicker های شمسی برای استفاده در ASP.NET و MVC

[/box] [divider style=”normal” top=”20″ bottom=”20″]

 

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

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

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

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>
             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");

از فیلم آموزشی نیز برای درک بهتر میتونید استفاده کنید .

[button color=”blue” size=”medium” link=”https://dl.mspsoft.com/s3/VideoArticels/Persian_Date_www.mspsoft.com.mp4″ icon=”” target=”true”]دانلود ویدئو آموزشی[/button]

 

مسعود شریفی پور

از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    منصوره پاسخ

    سلام
    من از این روش توی پروژه خودم که MVC هست استفاده کردم. الان وقتی کامپوننت های تقویمم رو باز میکنم، ماه بصورت شمسی داره نمایش داده میشه اما سال همچنان 2016 باقی مونده، اگه با دکمه امروز تاریخ رو انتخاب کنم، برای امروز خب همون 15 مهر 1395 رو درج میکنه که درسته اما تقویم وقتی باز میشه داره بصورت پیش فرض دی 2016 رو نشون میده. این مشکل رو چطور میشه حل کرد؟

      مسعود شریفی پاسخ

      لطفا رفرنس هایی که اضافه کردید را مجدد بررسی کنید.اگر اشتباه نکنم باید مشکل اونجا باشه

        منصوره پاسخ

        جناب شریفی، من فایل PersianCulture.cs رو به پروژه ی MVC م اضافه کردم و بعد اون سه خط کد رو به فایل Global.asax.cs اضافه کردم و متناسب با اون using های GSD.Globalization و System.Threading رو به کلاس اضافه کردم. چیزی جا افتاده؟
        الان تقویم روی وقتی باز میکنم، ماه جاری رو دی ماه 2016 نشون میده چون توی دهمین ماه میلادی هستیم فکر میکنم.
        راستی من این تنظیم رو داخل Web.config دارم :

          منصوره پاسخ

          تنظیم جا افتاده ی پست قبل :
          globalization culture="fa-IR" uiCulture="fa-IR"

            منصوره

            و من باز هم کامنت میذارم. منظور من از نمایش تاریخ اشتباه، نمایش تاریخ اشتباه توی کامپوننت تاریخ هست! DatePicker های داخل پروژه ام، الان دارن بصورت پیش فرض دی 2016 رو نشون میدن.

    یوسف پاسخ

    من داخل asp.net کلاس رو اضافه کردم بعدش چون asp global نداره مال پروژه رو دراگ کردم داخل پروژه ولی متاسفانه USING GSD.GLOBZATION رو نشناخت

      پویا قربانی پاسخ

      import کنید میشناسه.مجددا مشکل داشتید بگید بررسی کنیم

    فهیمه پاسخ

    من تمام اینکارهارو انجام دادم فقط میشه بگین چجوری توی ویو میتونم ازش استفاده کنم؟

      مسعود شریفی پاسخ

      نیازی نیز استفاده کنید شما تاریخ رو فراخوانی کنید مستقیما شمسی خواهد شد.نیازی به کاره خاص دیگه ای نیست.