50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

مشکل در استفاده از کلاس DateTime و تاریخ 30 و 31 ماه اردیبهشت

سلام

برای تبدیل تاریخ میلادی به شمسی از PersianCalendar استفاده میکنیم و مشکلی نیست اما اگر بخواهیم برای روزهای 30 و 31 ماه اردیبهشت ان را از حالت رشته تبدیل کنیم به یک متغییر از نوع DateTime با استفاده از دستورات مثل DateTime.Pars خطا زیر را میدهد :

"String was not recognized as a valid datetime"

یعنی اگر ما تاریخ 13960231 را بخواهیم تعیین کنیم نوع آن از نوع DateTime است و در یک متغییر از نوع DateTime قرار بدهیم خطا بالا را میبینیم مثلا :

 DateTime dt = DateTime.Parse("1396/02/31");

برای رفع این مشکل من از آدرس زیر استفاده کردم جواب گرفتم اما یک مقدار مراحلش طولانی و دشوار است لینک : Fixing Optional Calendars for Persian Culture in .NET

ایا راه حل ساده تری برای این مشکل نیست ؟

پرسیده شده در 1396/02/12 توسط

5 پاسخ

1

سلام و عرض ادب، مشکل به این خاطر هست که دستور Parse برای تبدیل رشته در قالب میلادی به نوع DateTime استفاده میشه و ماه دوم 31 روز نداره، برای رفع این مشکل یک Extension Method به صورت زیر تعریف کنید:

    class Program
    {
        static void Main(string[] args)
        {
            var date = "1396/02/31".ParsePersianDate();
        }
    }

    public static class DateExtension
    {
        public static DateTime ParsePersianDate(this string date)
        {
            var dateParts = date.Split('/');
            return new DateTime(int.Parse(dateParts[0]), int.Parse(dateParts[1]), int.Parse(dateParts[2]), new PersianCalendar());
        }
    }
پاسخ در 1396/02/12 توسط
0

سلام منم به همین مشکل خوردم اگه پاسخ دریافت کردی به من اطلاع بده

پاسخ در 1397/04/30 توسط
0

سلام

شماباید در ورود اطلاعات در textbox مربوطه چک کنید مثلا فرمت 00000000 قرار بدهید ویا بعداز وارد کردن اطلاعات چک کنید طول وارده 10 است یانه و اعداد را برای ماه چک کنید که بین 0و2 باشد و همچنین برای روز

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

پاسخ در 1396/02/12 توسط
0

سلام

مثل اینکه متوجه منظور من نشدید قرار نیست ما تاریخ 13960231 را به میلادی ببریم قرار است نوع ان از نوع تاریخ باشد کدهای زیر را ببینید:

    class Program
    {
        
        static void Main(string[] args)
        {

            
            DateTime tim = DateTime.Parse("1396/02/12");
            Console.WriteLine("value : "+string.Format("{0:yyyy/MM/dd}",tim));
            Console.WriteLine("Type is : "+tim.GetType().ToString());
            Console.ReadLine();
        }
       
    }

حالا اگر ما به جای 13960212 مقدار 13960231 را وارد کنیم خطا میگیریم برای رفع این خطا باید چه کرد ؟؟

پاسخ در 1396/02/12 توسط
1

سلام

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

using System;
namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            const string dateTime = "1396/02/31";
            var y = Convert.ToInt32(dateTime.Substring(0, 4));
            var m = Convert.ToInt32(dateTime.Substring(5, 2));
            var d = Convert.ToInt32(dateTime.Substring(8, 2));
            var x = new System.Globalization.PersianCalendar();
            var dt = x.ToDateTime(y, m, d, 0, 0, 0, 0, 0);
            Console.WriteLine(dt);
        }
    }
}
پاسخ در 1396/02/12 توسط

پاسخ شما