دسته بندی ها
21:58 1398/07/03

مشکل تاریخ شمسی در سی شارپ

مشخصات سوال کننده :
کاربر : hamdola     امتیاز کاربر : 121     رتبه کاربر : 12
دسته بندی : سی شارپ Vb.Net

به این سوال امتیاز بدهید    3
تعداد بازدید این سوال : 7184
پاسخ دهنده : saedbfd 23:24 1398/07/26

با سلام و درود

برای رفع این مشکل پیشنهاد می شود از ویندوز 10 استفاده نمایید چون ویندوز 10 از تاریخ شمسی پشتیبانی می کند و مشکلی بابت تاریخ های 31 ام به وجود نمی آورد.

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

 

موفق باشید

به این پاسخ امتیاز بدهید    2
امتیاز: 1654 رتبه: 1
پاسخ دهنده : reza001364 23:24 1398/07/26

سلام و روز بخير

ميتونيد از دستورات زير استفاده کنيد:

       private void Date()
       {
            PersianCalendar pc = new PersianCalendar();
            int year = pc.GetYear(DateTime.Now);
            int month = pc.GetMonth(DateTime.Now);
            int day = pc.GetDayOfMonth(DateTime.Now);
            string Date = year.ToString() + "/" + month.ToString().PadLeft(2, '0') + "/" + day.ToString().PadLeft(2, '0');
            lbl_Date.Text = Date;
       }

فقط درنظر داشته باشيد که بايد از کلاس مربوط به system.globalization هم استفاده کنيد.

به این پاسخ امتیاز بدهید    7
امتیاز: 35 رتبه: 22
1 نظر
meysam2017 : من از این کلاس استفاده میکنم و خوب جواب میگیرم

امتیاز کاربر : 0   رتبه کاربر : 7018   تاریخ ثبت : 10:08 1399/07/26
پاسخ دهنده : Nikki7 23:24 1398/07/26

 سلام دستور زير مشکلتوپن رو حل ميکنه.

//-------------  بدست اوردن تايخ شمسي و زمان کنوني   -------------

                var currentDate = DateTime.Now;
                ///------ حل مشکل خطا در تايخ اي 31 ام ماه ها----------
                ///
                // create an instance of culture
                CultureInfo info = new CultureInfo("fa-Ir");
                //set Persian calendar to it without get exception
                info.DateTimeFormat.Calendar = new PersianCalendar();
                Thread.CurrentThread.CurrentCulture = info;
                ///------------ نمايش ماه به صورت حروف
                ///---         يکشنبه  31 شهريور 1398 -----
                string pCalendar = currentDate.ToString("D", info);
                ///------------ نمايش ماه به صورت حروف
                ///---        1398/06/31 -----
                string pCalendarShort = currentDate.ToString("yyyy/MM/dd");
                ///نمايش زمان
                string currentTime = currentDate.ToString("hh:mm");
                //------------------------------------------------

 

به این پاسخ امتیاز بدهید    2
امتیاز: 23 رتبه: 30
پاسخ دهنده : saedbfd 23:24 1398/07/26

در صورتی که از ویندوز 10 استفاده می کنید تاریخ ویندوزتون باید حتما به صورت شمسی تنظیم شده باشه. تصویر زیر رو ملاحظه بفرمایید 

 

به این پاسخ امتیاز بدهید    4
امتیاز: 1654 رتبه: 1
پاسخ دهنده : Sowgandi 23:24 1398/07/26

با سلام. دوست گرامی در هنگام فرمت کردن تاریخ شمسی مثلا از 1398/1/1 به 1398/01/01 به هیچ وجه از دستور Convert.ToDateTime سیستم استفاده نکنید چون این تابع جهت تبدیل رشته به تاریخ میلادی است نه شمسی! مگر اینکه تاریخ شمسی روی سیستم نصب و فعال باشد که این امر فعلا در ویندوز 10 میسر می باشد.

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

ابتدا در بدنه فرم تابع زیر را قرار دهید.

    public static string FormatStringDate(string OldDate)
        {
                string NewDate = "";

                // validation omitted
                System.String[] userDateParts = OldDate.Split(new[] { "/" }, System.StringSplitOptions.None);
                int Year = int.Parse(userDateParts[0]);
                int Month = int.Parse(userDateParts[1]);
                int Day = int.Parse(userDateParts[2]);

                return NewDate;
        }

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

string NewDate = FormatStringDate(calender.Text);

 

به این پاسخ امتیاز بدهید    5
امتیاز: 871 رتبه: 3
پاسخ دهنده : Sowgandi 23:24 1398/07/26

فقط یه نکته یادم رفت بگم که تابع بالا مخصوص ایجاد در بدنه نرم افزار است اگر میخواهید تابع را در بدنه فرم ایجاد کنید کلمه Static را از تابع حذف کنید.

به این پاسخ امتیاز بدهید    1
امتیاز: 871 رتبه: 3
پاسخ دهنده : hamdola 23:24 1398/07/26

ممنون از شما Sowgandi

به این پاسخ امتیاز بدهید    0
امتیاز: 121 رتبه: 12
پاسخ دهنده : Alikashef 23:24 1398/07/26

بنظرم راحت ترین کار اینه که کامپوننت تاریخ رو عوض کن و از کامپوننت beh component استفاده کن مشکلت حل میشه یه سرچ توی اینترنت بکن پیداش می کنی

به این پاسخ امتیاز بدهید    3
امتیاز: 15 رتبه: 48
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود