PDA

View Full Version : مشکل در تبدیل تاریخ برای روز 31 ماه (Convert.toDateTime)



misoft.ir
چهارشنبه 14 اردیبهشت 1390, 16:59 عصر
سلام
در برنامه تاریخ ها رو به صورت شمسی در دیتابیس و با نوع Date ذخیره میکنم.

مشکلی نداشتم تا وقتی که متوجه شدم وقتی میخواهم ورودی متنی کاربر رو از یه تکست باکس دریافت و اون رو با استفاده از Convert.toDateTime تبدیل به نوع DateTime کنم ، در بعضی از روزهای این دستور خطا میده.

مثلا موقع تبدیل 1390/02/31 خطا میده ، فکر کنم برای 30 اردیبهشت هم خطا میده ولی برای تمام روزهای دیگه از اردیبهشت مشکلی نداره.

ممنون از کمکتون.

mahdighorbani
چهارشنبه 14 اردیبهشت 1390, 17:51 عصر
شما به صورت میلادی تاریخ رو وارد میکنید و تعداد روزهای ماه های میلادی با شمسی متفاوته و برای ماه دوم میلادی در سال های کبیسه 29 و سال های عدی 28 روز داریم پس 31/2 قطعا خطا دارد
بهتره تاریخ شمسی رو اول به میلادی تبدیل کنید بعد تو دیتابیس ذخیره کنید وقتی هم که میخواید نشونش بدبد دوباره به شمسی تبدیل کنید
تو تایپک زیر کلاس مربوط به این کارا هست

http://barnamenevis.org/showthread.php?285331-کامپوننت-تقویم-شمسی&p=1257180#post1257180

misoft.ir
جمعه 16 اردیبهشت 1390, 10:08 صبح
سلام
ممنون از پیشنهادتون ، ولی من نیاز دارم که تاریخ رو به صورت شمسی ذخیره کنم، اگر قرار باشه تبدیل کنم ، کلی باید کد برنامه رو دستکاری کنم. ضمن اینکه سرعت برنامه پایین میاد.

دنبال یه راهی هستم که اصولی تر باشه ، یه کاری که با اون بشه به برنامه یا سیستم فهماند که تاریخ رو با تقویم ایرانی مقایسه کنه.

ma.rad
جمعه 16 اردیبهشت 1390, 10:59 صبح
سلام بهتره از PersianCalendar استفاده کنید
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();

misoft.ir
یک شنبه 18 اردیبهشت 1390, 09:36 صبح
سلام بهتره از PersianCalendar استفاده کنید
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();
سلام
با این کار مشکلی حل نمیشه دوست عزیز.
من نوع فیلدم رو در دیتابیس ، از نوع تاریخ انتخاب کردم. تاریخ میلادی رو که تبدیل به شمسی میکنم، بعضی از روزهایی که در تقویم میلادی قرار نداره رو ایراد میگیره . مانند 1390/02/31 .

mahdighorbani
پنج شنبه 22 اردیبهشت 1390, 11:03 صبح
فکر نکنم راه بهتری وجود داشته باشه در هر صورت باید تاریخ رو به صورت میلادی تو بانک ذخیره کنی تا بتونی روش دستورات sql رو برای مرتب سازی query انجام بدی و همون تاریخ رو باید به شمسی تبدیل کنی و به کاربر برنامه نشون بدی

meysamda
پنج شنبه 22 اردیبهشت 1390, 20:47 عصر
بهتزین کار اینه که توی دیتابیست به جای اینکه یه دونه فیلد Date داشته باشی، سه تا فیلد Dat_Year ، Date_Month و Date_Day داشته یاشی و اطلاعات مربوط به تاریخ رو توی این سه ستون ذخیره کنی! (همه ی query هایی که مد نطرت هست رو هم میتونی این سه تا ستون بنویسی و گاهی کارت ساده تر هم میشه)

misoft.ir
شنبه 24 اردیبهشت 1390, 00:52 صبح
بهتزین کار اینه که توی دیتابیست به جای اینکه یه دونه فیلد Date داشته باشی، سه تا فیلد Dat_Year ، Date_Month و Date_Day داشته یاشی و اطلاعات مربوط به تاریخ رو توی این سه ستون ذخیره کنی! (همه ی query هایی که مد نطرت هست رو هم میتونی این سه تا ستون بنویسی و گاهی کارت ساده تر هم میشه)
سلام
ممنون از پاسختون
ولی فکر نمیکنید که اینطوری یه خورده کار مشکل میشه؟ فکر کنید بخواهید یه مقایسه روی تاریخ ها انجام بدهید .

ostovarit
شنبه 24 اردیبهشت 1390, 08:44 صبح
اگر تاریخ رو میلادی ذخیره میکنید نوع فیلد دیتابیس رو Datetime بگیرید اما اگر شمسی ذخیره میکنید nvarchar(50) مناسب هست.
اگر حتما میخواهید از نوع Datetime باشه تو تالار جستجو کنید یک کوئری در SQL در این رابطه دیده بودم اما ادرسش رو الان ندارم.

meysamda
شنبه 24 اردیبهشت 1390, 17:21 عصر
خواهش... نه بنظر من اصلا هم مشکل نمیشه! شما هر مقایسه ای مد نظرت هست رو میتونی با 2-3 خط دستور SQL انجام بدی! (اگه مقایسه خاصی مد نظرته Comment بزار من کد SQL لازم برای انجامش رو بهت میگم)

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