# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ASP.NET Web Forms >  تقویم شمسی (Persian Calendar) در ویژوال استودیو 2010 (vs 2010 = visual studio 2010)

## majid_darab

(ویرایش شده پس از پاسخ ها)
با سلام :
مدتی بود که تو سایت برنامه نویس نبودم و به تمامی دوستان سال جدید رو تبریک می گم...

در حال حاضر آیا این امکان وجود دارد که در vs 2010 (دات نت فریم ورک 4) بدون استفاده از هیچ کلاس یا dll جانبی خاصی تاریخ شمسی را با امکانات خود .net 4 داشته باشیم؟
چنانچه تنظیم یا روش خاصی (مثلا تغییر در properties خود پروژه) برای تاریخ شمسی وجود ندارد بهترین کلاس نوشته شده برای تقویم شمسی چیست؟(سوال 1)

در مورد شمسی بودن 3 فاکتور وجود دارد : 
الف)کامپوننت تقویم
ب)تاریخی که در یک لیبل نمایش داده می شه
ج)فارسی کردن اعداد بکار رفته در لیبل و کامپوننت تقویم

    برای فارسی کردن اعداد بکار رفته در لیبل می توان رشته تاریخ لیبل را توسط متد خاصی گرفت و اعداد درون آن را فارسی کرد!
    به نظرم این کار زیاد جالب نیست.چون با تغییر ماهیت اعداد ما در حقیقت دیگر با عدد سروکارنداریم و امکان انجام محاسبات ریاضی        
    روی این اعداد وجود ندارد.
    چگونه می توان این کار را با پروپرتی ها و متد های کلاس های PersianCalendar و CultureInfo و DateTimeFormatInfo انجام داد؟
(سوال 2)
در مورد کامپوننت تقویم چطور ؟ اول اینکه چطور *شمسیش* کنیم و دوم اینکه چطور اعداد داخل اونو مثل بالا به *فرمت فارسی* تبدیل کنیم.؟
(سوال 3)


با تشکر
مجید داراب
همیشه شاد و سلامت باشید

----------


## majid_darab

من کلاس زیرو که توسط دوست خوبمون آقای محمد میرمصطفی در codeproject قرار داده شده بود پیدا کردم ...
http://www.codeproject.com/KB/cs/PersianDateTime.aspx
اما هنوز بررسیش نکردم و نمی دونم داره از امکانات vs 2010 استفاده می کنه و یا اینکه این کلاسو در گذشته در این قسمت قرار داده بود.

----------


## مهدی کرامتی

بهترین گزینه برای استفاده از تاریخ شمسی در برنامه ها استفاده از کلاس PersianCalendar خود دات نت است. تنها مشکلی که وجود دارد عدم امکان استفاده از آن به عنوان تقویم پیش فرض برنامه است که نصب این افزونه: http://persianculture.codeplex.com
محدودیت فوق برطرف می شود.

----------


## raziee

> بهترین گزینه برای استفاده از تاریخ شمسی در برنامه ها استفاده از کلاس PersianCalendar خود دات نت است. تنها مشکلی که وجود دارد عدم امکان استفاده از آن به عنوان تقویم پیش فرض برنامه است که نصب این افزونه: http://persianculture.codeplex.com
> محدودیت فوق برطرف می شود.


جناب کرامتی برای نمایش اعداد فارسی چه بلایی باید سر کد هابیاریم؟
آیا استفاده از اعداد فارسی امکان پذیر هست یا خیر؟

            info.NativeDigits = new string[] { "٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩" };
کد بالا هیچ تاثیری ندارد.!!!
CultureInfo currentCI = Thread.CurrentThread.CurrentCulture;
            NumberFormatInfo nfi = currentCI.NumberFormat;
            string[] nativeDigitList = nfi.NativeDigits;
            
            
            foreach (string s in nativeDigitList)
            {
                Response.Write(s + "<br/>");
            }
اعداد درست Set میشند اما در اجرا هیچ تاثیری نداره.

کسی دلیلش رو میدونه؟

----------


## majid_darab

> جناب کرامتی برای نمایش اعداد فارسی چه بلایی باید سر کد هابیاریم؟
> آیا استفاده از اعداد فارسی امکان پذیر هست یا خیر؟
> 
>             info.NativeDigits = new string[] { "٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩" };
> کد بالا هیچ تاثیری ندارد.!!!
> CultureInfo currentCI = Thread.CurrentThread.CurrentCulture;
>             NumberFormatInfo nfi = currentCI.NumberFormat;
>             string[] nativeDigitList = nfi.NativeDigits;
>             
> ...




با سلام و عرض خسته نباشید :
من امروز کلی با کلاس های CultureInfo و  PersianCalendar  و DateTimeFormatInfo سروکله زدم.
استنباط من اینه که culture پیش فرض vs به صورت fa-IR می باشد(به خاطر وجود زبان فارسی نصب شده در ویندوز)
خوب پس culture پیش فرض شد fa-IR که داره از GregorianCalendar به صورت پیش فرض استفاده می کنه.
کامپوننت تقویم هم داره براساس culture و تقویم پیش فرض عمل می کنه
اگر در پروژه ی خود کد زیرور دی باگ کنید می بینید که بیشتر تنظیمات مورد نیاز ما در Culture فارسی وجود دارد !
CultureInfo facultureinfo = new CultureInfo("fa-IR");
از جمله اعدادی که ما به دنبال تبدیل اونها به فارسی هستیم (در قسمت NumberDigits) به صورت فارسی تنظیم شده اند.
اما نمی دونم چرا همواره اعداد به صورت انگلیسی در خروجی نشان  داده می شوند؟
مورد بعدی اینه که وفتی کامپوننت تقویمو استفاده می کنیم به خاطر کالچر پیش فرض فارسی روزهای هفته را به جای انگلیسی با فارسی نشان می دهد (حرف اول روز) و یه جواریی شده تلفیقی از فرهنگ فارسی و تقویم انگلیسی
برای درست شدن این قضیه باید culture را به en-US تغییر داد تا فرهنگ و تقویم همسان شوند.

منتظر راهنمایی مدیران محترم هستیم...

با تشکر از توجه شما

----------


## majid_darab

با سلام :
من افزونه ای که مدیر محترم کرامتی اعلام فرمودند را نصب کردم.
ولی یه ریزه گیج شدم.
زمانی که این افزونه نصب است چه اتفاقی در دات نت فریم ورک 4 (VS 2010) می افتد ؟
بدون نصب افزونه از چه کدهایی باید در PAGE_LOAD استفاده نماییم و با افزونه چطور؟

در لینک مورد نظر یه CONSOLE APP داشتیم که با دات نت فریم ورک 2 و 3.5 به  خوبی در VS 2010 کار می کنه ، اما وفتی .NET FRAMEWORK رو به 4 تغییر می  دیم در یک سری از خطوط ارور می دهد.(ارورها درکلاس  PersianCultureHelper)
کد مورد نظر در پروژه پس از اعمال تغییرات در نام گذاری ها به صورت زیر شد  :

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

namespace PersianCulture
{

    public static class PersianCultureHelper
    {
        //Represents a PropertyInfo that refer to ID of Calendar. The ID is private property of Calendar.
        private static PropertyInfo calendarID;

        //Represents a FieldInfo that refer to m_isReadOnly of CultureInfo. The m_isReadOnly is private filed of CultureInfo.
        private static FieldInfo cultureInfoReadOnly;

        //Represents a FieldInfo that refer to calendar of CultureInfo. The calendar is private filed of CultureInfo.
        private static FieldInfo cultureInfoCalendar;

        //Represents a FieldInfo that refer to isReadOnly of  NumberFormatInfo. The isReadOnly is private filed of NumberFormatInfo.
        private static FieldInfo numberFormatInfoReadOnly;

        //Represents a FieldInfo that refer to m_isReadOnly of  DateTimeFormatInfo. The m_isReadOnly is private filed of  DateTimeFormatInfo.
        private static FieldInfo dateTimeFormatInfoReadOnly;

        //Represents a FieldInfo that refer to calendar of  DateTimeFormatInfo. The calendar is private filed of DateTimeFormatInfo.
        private static FieldInfo dateTimeFormatInfoCalendar;

        //Represents a FieldInfo that refer to m_cultureTableRecord of  DateTimeFormatInfo. The m_cultureTableRecord is private filed of  DateTimeFormatInfo.
        //private static FieldInfo dateTimeFormatInfoCultureTableRecord;

        //Represents a MethodInfo that refer to UseCurrentCalendar of  CultureTableRecord. The UseCurrentCalendar is private method of  CultureTableRecord that the class is private too.
        //private static MethodInfo cultureTableRecordUseCurrentCalendar;

        /// <summary>
        /// Represents static constructor
        /// </summary>
        static PersianCultureHelper()
        {
            calendarID = typeof(Calendar).GetProperty("ID", BindingFlags.NonPublic | BindingFlags.Instance);
            cultureInfoReadOnly =  typeof(CultureInfo).GetField("m_isReadOnly", BindingFlags.NonPublic |  BindingFlags.Public | BindingFlags.Instance);
            cultureInfoCalendar =  typeof(CultureInfo).GetField("calendar", BindingFlags.NonPublic |  BindingFlags.Public | BindingFlags.Instance);
            numberFormatInfoReadOnly =  typeof(NumberFormatInfo).GetField("isReadOnly", BindingFlags.NonPublic |  BindingFlags.Public | BindingFlags.Instance);
            dateTimeFormatInfoCalendar =  typeof(DateTimeFormatInfo).GetField("calendar", BindingFlags.NonPublic |  BindingFlags.Public | BindingFlags.Instance);
            dateTimeFormatInfoReadOnly =  typeof(DateTimeFormatInfo).GetField("m_isReadOnly"  ,  BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
            //dateTimeFormatInfoCultureTableRecord =  typeof(DateTimeFormatInfo).GetField("m_cultureTabl  eRecord",  BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
            //Type cultureTableRecord = typeof(DateTimeFormatInfo).Assembly.GetType("Syste  m.Globalization.CultureTableRecord");
            //cultureTableRecordUseCurrentCalendar =  cultureTableRecord.GetMethod("UseCurrentCalendar",  BindingFlags.NonPublic | BindingFlags.Instance);
        }

        /// <summary>
        /// Represents a method that set PersianCalendar to specified instances of CultureInfo
        /// </summary>
        /// <param name="culture">Represents an instance of  CultureInfo that persian number format should be set to  it.</param>
        public static void SetPersianOptions(CultureInfo farsicultureinfo)
        {
            SetPersianCalendar(farsicultureinfo, new DateTimeFormatInfo());
        }

        /// <summary>
        /// Represents a method that set PersianCalendar to specified instances of CultureInfo and DateTimeFormatInfo
        /// </summary>
        /// <param name="culture">Represents an instance of  CultureInfo that persian number format should be set to  it.</param>
        /// <param name="dateTimeFormat">Represents an instance of  DateTimeFormatInfo that persian format should be set to  it.</param>
        public static void SetPersianCalendar(CultureInfo farsicultureinfo, DateTimeFormatInfo datetimeformatinfo)
        {
            if (farsicultureinfo == null || farsicultureinfo.LCID != 1065)
                return;
            PersianCalendar persiacalendar = new PersianCalendar();
            bool readOnly = (bool)cultureInfoReadOnly.GetValue(farsicultureinf  o);
            if (readOnly)
            {
                cultureInfoReadOnly.SetValue(farsicultureinfo, false);
            }
            farsicultureinfo.DateTimeFormat = datetimeformatinfo;
            InitPersianDateTimeFormat(datetimeformatinfo);
            cultureInfoCalendar.SetValue(farsicultureinfo, persiacalendar);
            InitPersianNumberFormat(farsicultureinfo);
            if (readOnly)
            {
                cultureInfoReadOnly.SetValue(farsicultureinfo, true);
            }
        }

        /// <summary>
        /// Represents a method that set persian number format to specified instance CultureInfo.
        /// </summary>
        /// <param name="info">Represents an instance of  CultureInfo that persian number format should be set to  it.</param>
        public static void InitPersianNumberFormat(CultureInfo farsicultureinfo)
        {
            InitPersianNumberFormat(farsicultureinfo.NumberFor  mat);
        }

        /// <summary>
        /// Represents a method that set persian number format to specified instance NumberFormatInfo.
        /// </summary>
        /// <param name="info">Represents an instance of  NumberFormatInfo that persian option should be set to it.</param>
        public static void InitPersianNumberFormat(NumberFormatInfo farsicultureinfoNumberFormatInfo)
        {
            if (farsicultureinfoNumberFormatInfo == null)
                return;
            bool readOnly = (bool)numberFormatInfoReadOnly.GetValue(farsicultu  reinfoNumberFormatInfo);
            if (readOnly)
            {
                numberFormatInfoReadOnly.SetValue(farsicultureinfo  NumberFormatInfo, false);
            }
            farsicultureinfoNumberFormatInfo.NativeDigits = new string[] { "٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩" };
            farsicultureinfoNumberFormatInfo.CurrencyDecimalSe  parator = "/";
            farsicultureinfoNumberFormatInfo.CurrencySymbol = "ريال";
            if (readOnly)
            {
                numberFormatInfoReadOnly.SetValue(farsicultureinfo  NumberFormatInfo, true);
            }
        }

        /// <summary>
        /// Represents a method that set persian option to specified instance CultureInfo
        /// </summary>
        /// <param name="dateTimeFormat">Represents an instance of  DateTimeFormatInfo that persian option should be set to  it.</param>
        public static void InitPersianDateTimeFormat(DateTimeFormatInfo datetimeformatinfo)
        {
            if (datetimeformatinfo == null)
                return;
            PersianCalendar persiacalendar = new PersianCalendar();
            bool readOnly = (bool)dateTimeFormatInfoReadOnly.GetValue(datetime  formatinfo);
            if (readOnly)
            {
                dateTimeFormatInfoReadOnly.SetValue(datetimeformat  info, false);
            }
            dateTimeFormatInfoCalendar.SetValue(datetimeformat  info, persiacalendar);
            //object obj2 = dateTimeFormatInfoCultureTableRecord.GetValue(info  );
            //cultureTableRecordUseCurrentCalendar.Invoke(obj2, new object[] { calendarID.GetValue(calendar, null) });
            datetimeformatinfo.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
            datetimeformatinfo.ShortestDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
            datetimeformatinfo.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
            datetimeformatinfo.AbbreviatedMonthNames = new string[] {  "فروردین", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان",  "آذر", "دی", "بهمن", "اسفند", "" };
            datetimeformatinfo.MonthNames = new string[] { "فروردین",  "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر",  "دی", "بهمن", "اسفند", "" };
            datetimeformatinfo.AMDesignator = "ق.ظ";
            datetimeformatinfo.PMDesignator = "ب.ظ";
            datetimeformatinfo.FirstDayOfWeek = DayOfWeek.Saturday;
            datetimeformatinfo.FullDateTimePattern = "yyyy, MMMM dddd, dd HH:mm:ss";
            datetimeformatinfo.LongDatePattern = "yyyy , MMMM dddd , dd";//Change This Line Causes Problems
            datetimeformatinfo.ShortDatePattern = "yyyy/MM/dd";
            if (readOnly)
            {
                dateTimeFormatInfoReadOnly.SetValue(datetimeformat  info, true);
            }
        }
    }
}


واما خطوط دارای ارور :
            //cultureTableRecordUseCurrentCalendar =  cultureTableRecord.GetMethod("UseCurrentCalendar",  BindingFlags.NonPublic | BindingFlags.Instance);

---------------------------------------

            //object obj2 = dateTimeFormatInfoCultureTableRecord.GetValue(info  );
            //cultureTableRecordUseCurrentCalendar.Invoke(obj2, new object[] { calendarID.GetValue(calendar, null) });


چگونه این ارورها را رفع نمایم؟
فکر می کنم این کدها در ارتباط با اسمبلی دات نت هستند که برای تحقیق درمورد آنها باید Reflector را در دات نت بررسی کرد.

واما کدی که در page_Load استفاده می کنم به صورت زیر است :
CultureInfo facultureinfo = new CultureInfo("fa-IR");
            PersianCultureHelper.SetPersianOptions(faculturein  fo);
            Thread.CurrentThread.CurrentCulture = facultureinfo;

واین در حالتی ست که افزونه نصب است.

اگر راهنمایی بفرمایید ممنون می شوم

باتشکر 
مجید داراب

----------


## monika

سلام من میخوام داخل پروژه ام ویزیت آنلاین داشته باشم این کاربه تعریف تاریخ شمسی احتیاج داره؟
من چطور باید این کاررو انجام بدم .طوری که تاریخ وساعت توپروژه ام تعریف بشه

----------


## HOSSEINGHOLI

من persian culture رو نصب کردم چیکار کنم که تقویم در فرم شمسی بشه

----------


## sanay_esh

با سلام خدمت همه اساتید محترم ( بخصوص استاد گرانقدر جناب کرامتی ) و دوستان عزیز 

برای استفاده از تقویم شمسی باید مراحل زیر را طی نمود:

ابتدا یک کلاس با محتویات زیر به پروژه خود اضافه نمائید:
public class PersianCulture : CultureInfo
    {
        private readonly Calendar cal;
        private readonly Calendar[] optionals;

       
        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.asax به پروژه اضافه نمائید 

سپس بروی فایل اضافه شده دوبار کلیک نمائید و کد زیر را در قسمت مربوطه اضافه نمائید 
 protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var persianCulture = new PersianCulture();
            Thread.CurrentThread.CurrentCulture = persianCulture;
            Thread.CurrentThread.CurrentUICulture = persianCulture;
        }

در این صورت هر گونه کاری با تاریخ داشتید دات نت خودش براتون شمسی میکنه !!!

----------


## HOSSEINGHOLI

یعنی حتی اگه از month calendar موجود در vs2010 استفاده کنم شمسی میشه؟

----------


## sanay_esh

عرض کردم هر گونه کاری با تاریخ داشتید دات نت براتون بصورت شمسی انجام مید ه

تمامی امکانات کلاس Datetime بصورت شمسی در اختیار شما قرار دارد

----------


## HOSSEINGHOLI

مرسی بابت جوابتون حالا من چطوری میتونم تو windows form از این کلاس استفاده کنم.
اونجا که دیگه فایل global نداره باید چکار کنم؟

----------


## TeacherMath

میتو نید توی program   تابع   main()   بنویسید

----------


## HOSSEINGHOLI

اونجا نوشتم ولی جواب نمیده
باید چیکار کنم؟

----------


## mojmadah

منظور از قسمت مربوطه تو فایل global.asax چیه؟

----------


## ramin149

> عرض کردم هر گونه کاری با تاریخ داشتید دات نت براتون بصورت شمسی انجام مید ه
> 
> تمامی امکانات کلاس Datetime بصورت شمسی در اختیار شما قرار دارد


دوست عزیز دستتون درد نکنه . من هم خیلی وقت بود دنبال حل این مشکل بودم . اما الان یک سوال دارم اگر بخواهیم فقط کنترل calender این خصوصیت رو به خودش بگیره باید چه کدی بنویسیم ؟؟؟

----------


## sanay_esh

کمی به کلاس اصلی در صفحه اول این تاپیک دقت کنی همه چیز معلومه خیلی هم سخت نیست

به این سایت هم مراجعه کنید متوجه میشوید

----------


## ramin149

> کمی به کلاس اصلی در صفحه اول این تاپیک دقت کنی همه چیز معلومه خیلی هم سخت نیست
> 
> به این سایت هم مراجعه کنید متوجه میشوید


دوست عزیز من با تقویم آقای هاشمی نژاد کار کردم . اما در باره کلاس شما چیزی سر در نیاوردم که چطور میشه فقط روی کنترل تقویم خود asp.net تنظیم کرد . که شما هم که در پروژه قرار می دهم تمام تاریخ ها به شمسی بر می گرده که این کار برای من زیاد جالب نیست زیرا تمام کارهای تاریخ رو بر حسب میلادی انجام دادم . لطفا یک نمونه برای تنظبم روی کنترل تقویم قرار دهید . با تشکر .

----------


## azygole

با سلام خدمت آقای sanay_esh
از کدهای شما استفاده کردم خیلی خوب بود اما تقویم من فقط ماه و سالش شمسی شد و روزهاش میلادی باقی موند.باید چکار کنم؟

----------


## sanay_esh

سلام 

برای استفاده از این کلاس شما باید طبق گفته بند در صفحه اول این تاپیک یک global.asax ایجاد و در قسمت Application_BeginRequest این کد را قرار بدهید :



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




اما شما : 



> از کدهای شما استفاده کردم خیلی خوب بود اما تقویم من فقط ماه و سالش شمسی شد و روزهاش میلادی باقی موند.باید چکار کنم؟


کد خود را در اینجا قرار دهید یا حداقل یک پروژه کوچیک ایجاد کنید و تستی از این کلاس استفاده کنید اگر دوباره با این مشکل روبرو شدید پروژه را در اینجا قرار دهید تا بررسی کنیم

----------


## azygole

با سلام و عرض پوزش از تاخیر در جواب 
من با دستورات شما کار کردم به این نتیجه رسیدم که این کدها روی تقویم کامپوننتهای تاریخ devexpress کار نمی کنه . شاید هم چون global.asax رو نتونستم راه بندازم اینطوریه . آخه وقتی فایل global رو ایجاد می کنم و کد شما رو توش کپی می کنم این خطا رو می ده :
The name 'Thread' does not exist in the current context
جایی هم نداره که این خط رو اضافه کنم:
using System.Threading;
آخه این فایل رو اضافه کردم و توی فرم اولم یعنی default.aspx کدهای global.asax که گفته بودید وارد کردم و خطا نداد اما تقویم devexpress  درست نشد ولی تقویم خود دات نت درست شد.
من منتظر کمک شما هستم . با تشکر فراوان

----------


## saeed_sho

شما اینطوری بنویسید
System.Threading.Thread.CurrentThread.CurrentCultu  re = persianCulture;

----------


## azygole

سلام.خطا رفع شد اما تقویم شمسی نشد  :ناراحت:

----------


## ali4545

سلام
نتونستم دانلود کنم
خواهش می کنم برام ایمیل کنید
froo_kia1390@yahoo.com
متشکرم

----------


## sh

ظاهراً روش قبلی بهبود پیدا کرده 

http://www.codeproject.com/articles/...n-culture-in-n

اگر دوستان بتونن یه مثال واسه فارسی کردن monthcalendar یا  datetimepicker درست کنند و اینجا بگذارند واقعا لطف میکنن

----------


## fardin_esmi

جناب sanay_esh با استفاده از این کلاس و توضیحاتی که دادید من تقویم رو فارسی کردم اما یک سوال دارم:
چطور می تونم تاریخ رو در دیتابیس به صورت date ذخیره کنم ؟من کدهای زیر رو نوشتم اما هنگام ذخیره error میده :



protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
PersianCalendar pc = new PersianCalendar();
        DateTime Date = Calendar1.SelectedDate;
TextBox1.Text =pc.GetYear(Date)+"/"+pc.GetMonth(Date)+"/"+pc.GetDayOfMonth(Date);
d1 = new DateTime(pc.GetYear(Date),pc.GetMonth(Date), pc.GetDayOfMonth(Date) ,pc);
}
protected void Button1_Click(object sender, EventArgs e)
    {
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin  gs["calendarConnectionString1"].ConnectionString);
        SqlCommand cmd = new SqlCommand("insert into dates (date) values ('" +d1+ "')",con);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
        
        Label1.Visible = true;
        Label1.Text = "sabt shod";
        GridView1.DataBind();

خطایی که میده اینه:
Specified time is not supported in this calendar. It should be between 03/21/0622 00:00:00 (Gregorian date) and 12/31/9999 23:59:59 (Gregorian date), inclusive.
Parameter name: time

----------


## sanay_esh

با سلام خدمت شما دوست گرامی 

شما باید نوع فیلد خود را در DB از نوع DateTime یا Date  در نظر بگیرید و براحتی آن را میتوانید ذخیره نمائید 

از طرفی اگر بخواهید بصورت رشته در DB ذخیره نمائید میتوانید از متد ToString()  این تابع استفاده نموده و آنرا به رشته تبدیل و در بانک خود ذخیره نمائید 

همین !!

----------


## fardin_esmi

با سلام مجدد
من نوع فیلد رو هم date و هم datetime تعریف کردم اما باز هم خطا میگیره .ممکنه اشکال این کدهایی که گذاشتم بفرمایید کجاست؟

----------


## fardin_esmi

سلام مجدد
مشکلم با استفاده از پارامترها حل شد.

----------


## vahid_pitok

سلام دوستان
من زمان رو به شمسی تبدیل کردم حالا می خوام زمان رو از دیتابیش چک کنم خطا می گیره؟
آیا می شه  زمان رو به میلادی گرفت؟

ممنون می شم راهنمایی کنید

----------


## arash_abay

> با سلام خدمت همه اساتید محترم ( بخصوص استاد گرانقدر جناب کرامتی ) و دوستان عزیز 
> 
> برای استفاده از تقویم شمسی باید مراحل زیر را طی نمود:
> 
> ابتدا یک کلاس با محتویات زیر به پروژه خود اضافه نمائید:
> public class PersianCulture : CultureInfo
>     {
>         private readonly Calendar cal;
>         private readonly Calendar[] optionals;
> ...


 ..................................................  ........................

با سلام خدمت شما و اساتید گرامی
باید بگم بسیار روش جالب و خلاقانه ای بودبود..
اما فقط میشه از این روش برای Calender مربوط به asp.net استفاده کرد..که متاسفانه DatePicker ندارد..و وقتی از کامپوننتهایی مثل Telerik استفاده میکنیم به مشکل بر میخوریم با این که در ابتدا همه چیز فارسی است ولی وقتی تاریخی select میشود روز آن شمسی ولی ماه و سال آن میلادی نوشته میشود..
آیا راهی برای این مسئله وجود دارد؟
ممنون.

----------


## alale66

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

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

رو هم به Main اضافه کردم ولی اتفاقی نیافتاد.
راهی هست بشه DateTinmePichker رو شمسیش کرد؟میشه راهنماییم کنید لطفا
ممنون

----------


## hinatiloos

سلام
من بشدت نیاز مند 
DateTimePicker 
و
month calendar 
با تاریخ شمی هستم.
مثلا میشه
http://www.daypilot.org/demo/Month/
رو شمسی کرد؟

----------


## majid_i68

> با سلام خدمت همه اساتید محترم ( بخصوص استاد گرانقدر جناب کرامتی ) و دوستان عزیز 
> 
> برای استفاده از تقویم شمسی باید مراحل زیر را طی نمود:
> 
> ابتدا یک کلاس با محتویات زیر به پروژه خود اضافه نمائید:
> public class PersianCulture : CultureInfo
>     {
>         private readonly Calendar cal;
>         private readonly Calendar[] optionals;
> ...




کسی هست که از این کد استفاده کرده باشه ..من میخوام در برنامه ویندوز فرم  monthCalendar  رو فارسی کنم.. کلاس رو ساختم اما نمیدونم   Application_BeginRequest  رو باید چطور در تایع main قرار بدم

----------


## karimi.ali2005

> کسی هست که از این کد استفاده کرده باشه ..من میخوام در برنامه ویندوز فرم  monthCalendar  رو فارسی کنم.. کلاس رو ساختم اما نمیدونم   Application_BeginRequest  رو باید چطور در تایع main قرار بدم


باید داخل program بنویسید

----------


## mdssoft

شما می تونید از کتابخانه زیر استفاده کنید، تمامی کارهای مورد نظر شما رو انجام میده

http://www.codeproject.com/Articles/...Time-in-Csharp

----------


## دکپریو

سلام بی زجمت بگین چطور میشه تو برنامم یه تقویم فارسی مثل کامپننت  DateTimePicker1 درvb.net2010 داشته باشم بی زخمت اگه هست خیلی ساده توضیح  بدین چطور استفاده کنم من زیاد بلد نیستم ممنون :متفکر:

----------


## mdssoft

اگر وب منظورتون هست که می تونید از DateTimePicker هایی مثل Bootstrap Persian DateTimePicker استفاده کنید اما در مورد ویندوزی می تونید سرچ کنید من ویندوزی کار نمی کنم

----------


## aliasghar2

من خودم شخصا از اینکامپوننت استفاده میکنم با جاوا اسکریپ نوشه شده و خیلی هم زیباس نیاز به dll و یا jquery هم نداره
http://amib.ir/weblog/?page_id=316

----------


## mdssoft

> من خودم شخصا از اینکامپوننت استفاده میکنم با جاوا اسکریپ نوشه شده و خیلی هم زیباس نیاز به dll و یا jquery هم نداره
> http://amib.ir/weblog/?page_id=316


DatePicker خیلی زیبایی بود
اما jquery plugin بودن و استفاده از bootstrap در بعضی از موارد مزیت حساب میشن
1- استفاده از bootstrap یعنی اینکه این تقویم responsive هست
2- با استفاده از jQuery میتوان به آبجکت های تقویم دسترسی پیدا کردم و پارامترهای اون رو تغییر داد
3- به علت استفاده از bootstrap تم تقویم کاملا به تم bootstrap وابسته هست و با عوض شدن تم bootstrap تم تقویم هم عوض میشود
4- Open Source هست و سورس آن minify نشده و کاملا قابل ویرایش است
5- می توان بدون نوشتن کد جاوا اسکریپت و تنها با Attribute های html تقویم رو فعال و یا غیر فعال کرد

----------


## ahad123

> بهترین گزینه برای استفاده از تاریخ شمسی در برنامه ها استفاده از کلاس PersianCalendar خود دات نت است. تنها مشکلی که وجود دارد عدم امکان استفاده از آن به عنوان تقویم پیش فرض برنامه است که نصب این افزونه: http://persianculture.codeplex.com
> محدودیت فوق برطرف می شود.


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

----------

