مشکل در استفاده از کلاس 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
ایا راه حل ساده تری برای این مشکل نیست ؟
5 پاسخ
سلام و عرض ادب، مشکل به این خاطر هست که دستور 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()); } }
سلام منم به همین مشکل خوردم اگه پاسخ دریافت کردی به من اطلاع بده
سلام
شماباید در ورود اطلاعات در textbox مربوطه چک کنید مثلا فرمت 00000000 قرار بدهید ویا بعداز وارد کردن اطلاعات چک کنید طول وارده 10 است یانه و اعداد را برای ماه چک کنید که بین 0و2 باشد و همچنین برای روز
و اما بهترین راه استفاده از کامپونت تاریخ است که در ویدءوهای آموزشی سی شارپ پیشرفته مهندس احمدی وجود دارد ویا در اینترنت سرچ کنید ودانلودکنید
سلام
مثل اینکه متوجه منظور من نشدید قرار نیست ما تاریخ 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 را وارد کنیم خطا میگیریم برای رفع این خطا باید چه کرد ؟؟
سلام
کد زیر راحترین روش می باشد که خودتان می توانید تغییرات لازم مانند اینکه تاریخ کامل وارد شود و غیره را پیاده سازی کنید
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); } } }