ورود / ثبت نام
0
0

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

1164 بازدید
تاریخ شمسی

تاریخ شمسی

نمایش تاریخ شمسی همیشه یکی از امکاناتی است که ما مردمان پارسی باید در پروژه استفاده کنیم ، البته در نظر بگیریم که ما فقط باید در هنگام نمایش تاریخ را به صورت شمسی نمایش دهیم ، اطلاعات ما در دیتابیس باید به صورت میلادی ذخیره شده باشد به دلایلی که در ادامه باهم برسی میکنیم.اول اینکه ما از کلاس 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]

 

آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=18583
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
مسعود شریفی پور
از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.
مطالب بیشتر
برچسب ها:

نظرات

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

دیدگاهتان را بنویسید

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

  1. سلام
    من از این روش توی پروژه خودم که MVC هست استفاده کردم. الان وقتی کامپوننت های تقویمم رو باز میکنم، ماه بصورت شمسی داره نمایش داده میشه اما سال همچنان ۲۰۱۶ باقی مونده، اگه با دکمه امروز تاریخ رو انتخاب کنم، برای امروز خب همون ۱۵ مهر ۱۳۹۵ رو درج میکنه که درسته اما تقویم وقتی باز میشه داره بصورت پیش فرض دی ۲۰۱۶ رو نشون میده. این مشکل رو چطور میشه حل کرد؟

    لایک

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

        لایک

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

            لایک