PDA

View Full Version : سوال: ثبت نشدن برخی از تاریخ های شمسی بعضی از ماه ها با تاریخ میلادی



حسین.کاظمی
پنج شنبه 14 اسفند 1393, 12:08 عصر
باسلام

یه برنامه تحت ویندوز با بانک اطلاعاتی اکسس نوشتم؛ توی بانکم یه فیلدی دارم از نوع datetime و از طریق برنامه کاربر تاریخ شمسی را انتخاب می کند و ثبت میکند چه راه حلی برای ثبت شدن تاریخ هایی مث 31 اردیبهشت،31تیر و شهریور ماه دارید؟

با تشکر

محمد آشتیانی
پنج شنبه 14 اسفند 1393, 12:46 عصر
سلام
قبل از ثبت باید تاریخ شمسی رو به میلادی تبدیل کنید و مجدد موقع خوندن از دیتابیس و نمایش تاریخ رو به شمی تبدیل کنید.
مسلمه که نوع DateTime برای ذخیره تایخ های میلادی بکار میره و تعداد روزهای ماه های میلادی با ماه های شمسی تطبیق نداره.




موفق باشید.

امیر مهرشاد
پنج شنبه 14 اسفند 1393, 12:48 عصر
برای مشکل شما نوع دیتا تایپ یا فیلد تاریختون باید از نوع text باشه تا 31 6 ماه اول سال رو قبول کنه و براحتی هم میشه با تاریخ ها هم کار کرد یعنی باید برای اضافه یا کم کردن یا محاسبات تاریخ (اگر لازم بود) تاریخ رو از بانکتون در قالب رشته بگیرید و توی برنامتون به DateTime تبدیل و هر کاری که دوست داشتید انجام بدید:چشمک:

حسین.کاظمی
پنج شنبه 14 اسفند 1393, 13:18 عصر
ممنون از پاسختون
میشه فیلد تاریخ را رشته ایی گرفت و بعداً میشه بین دوتاریخ جست و جو کرد یا باید حتما نوع فیلد تاریخ باشه؟

SabaSabouhi
پنج شنبه 14 اسفند 1393, 14:43 عصر
برای مشکل شما نوع دیتا تایپ یا فیلد تاریختون باید از نوع text باشه تا 31 6 ماه اول سال رو قبول کنه و براحتی هم میشه با تاریخ ها هم کار کرد یعنی باید برای اضافه یا کم کردن یا محاسبات تاریخ (اگر لازم بود) تاریخ رو از بانکتون در قالب رشته بگیرید و توی برنامتون به DateTime تبدیل و هر کاری که دوست داشتید انجام بدید:چشمک:

سلام
دوست عزیز، خواهشمندم راهنمایی اشتباه نکنید.
تاریخ باید به صورت تاریخ نگهداری بشه نه رشته. و هنگام نمایش تبدیل به تاریخ شمسی بشه. هر راه دیگری اشتباه هست.
اینطور که گفته می‌شه گویا ویندوز 10 از تاریخ شمسی هم پشتیبانی می‌کنه و برای تبدیل تاریخ به شمسی هم دیگه مشکلی وجود نخواهد داشت.

صبا صبوحی

lovee20002002
پنج شنبه 14 اسفند 1393, 19:16 عصر
سلام دوست عزیز من هم این مشکل رو داشتم البته با sql یک نکته رو توجه کن تو دایکیومنت زده datetime از 0 تا 9999 رو میگیره
https://msdn.microsoft.com/en-us/library/ms187819.aspx
ازاونجا که ماکروسافت رسما اعلام کرد من شمی رو پشتیبانی میکنم منم به اشتباه فکر کردم میتونم شمسی رو زخیره کنم این کارو انجام دادم برنامه رو تحویل دادم
رو همین تاریخ هایی که شما میفرمایید به مشکل خوردم و اگر دقت کنید با تبدیل تاریخ به میلادی متو جه میشید ماه فبریه میلادی 28 روزه و یک ماه در مینون 30 و 31 میشه
و sql هم اینو نمیشناخت
راه حل یک کلاس بسازید تاریخ روموقعذخیره به میلادی تبدیل و ذخیره کنید موقع خوندن باز برعکس کنید موفق باشید

امیر مهرشاد
پنج شنبه 14 اسفند 1393, 20:55 عصر
سلام
دوست عزیز، خواهشمندم راهنمایی اشتباه نکنید.
تاریخ باید به صورت تاریخ نگهداری بشه نه رشته. و هنگام نمایش تبدیل به تاریخ شمسی بشه. هر راه دیگری اشتباه هست.
اینطور که گفته می‌شه گویا ویندوز 10 از تاریخ شمسی هم پشتیبانی می‌کنه و برای تبدیل تاریخ به شمسی هم دیگه مشکلی وجود نخواهد داشت.

صبا صبوحی


با عرض احترام به پاسخ حضرتعالی من جند ساله با همین روش با تاریخ شمسی کار میکنم sql و .net رو دست کم نگیرید

SabaSabouhi
پنج شنبه 14 اسفند 1393, 20:59 عصر
سلام دوست عزیز من هم این مشکل رو داشتم البته با sql یک نکته رو توجه کن تو دایکیومنت زده datetime از 0 تا 9999 رو میگیره
https://msdn.microsoft.com/en-us/library/ms187819.aspx
ازاونجا که ماکروسافت رسما اعلام کرد من شمی رو پشتیبانی میکنم منم به اشتباه فکر کردم میتونم شمسی رو زخیره کنم این کارو انجام دادم برنامه رو تحویل دادم
رو همین تاریخ هایی که شما میفرمایید به مشکل خوردم و اگر دقت کنید با تبدیل تاریخ به میلادی متو جه میشید ماه فبریه میلادی 28 روزه و یک ماه در مینون 30 و 31 میشه
و sql هم اینو نمیشناخت
راه حل یک کلاس بسازید تاریخ روموقعذخیره به میلادی تبدیل و ذخیره کنید موقع خوندن باز برعکس کنید موفق باشید

سلام
پشتیبانی از فارسی به این معنی نیست که یه DataType جدید اضافه کنن، به این معنی هست که امکان تبدیلش ( در نمایش ) رو به تاریخ ایرانی ارائه کنن.
الان شما با تابع Convert می‌تونی تاریخ به شکل‌های مختلف ببینی، احتمالاً یه کدی هم اضافه می‌کنن که با اون کد بتونی تاریخ رو به شمسی تبدیل کنی. ( در T-Sql )
در حال حاضر تو #C شما می‌تونی تاریخ میلادی رو به تاریخ هجری قمری تبدیل کنی، البته با هجری قمری ایران سازگاری نداره اما برای کشورهای عربی قابل استفاده هست.
همین قابلیت برای هجری شمسی اضافه بشه کلاً مشکلات تبدیل تاریخ حل می‌شه به امید خدا.
اما در هر صورت تاریخ به صورت «تاریخ» ذخیره می‌شه و حالت عادی نمایش و ذخیره به صورت میلادی هست. ( حداقل تا اطلاع ثانوی )
موقع نمایش با یه تابع اون رو شمسی کنید ( برای Sql اخیراً یه تابع سریع و دقیق تو تالار T-Sql گذاشتم می‌تونید دریافتش کنید )

صبا صبوحی

SabaSabouhi
پنج شنبه 14 اسفند 1393, 21:02 عصر
با عرض احترام به پاسخ حضرتعالی من جند ساله با همین روش با تاریخ شمسی کار میکنم sql و .net رو دست کم نگیرید

سلام
من هم شرکتی رو می‌شناسنم که به دلایل خاص خودشون هنوز از Framework 1.1 استفاده می‌کنن.
این که شما می‌تونی تاریخ شمسی رو تبدیل به تاریخ میلادی کنی ( که کار پیچیده‌ای هم نیست ) دلیل نمی‌شه که کارت درست باشه.
تاریخ رو باید به صورت «تاریخ» ثبت کنی، نه رشته حرفی. شاید شما دوست داشته باشی که اعداد رو هم به صورت رشته نگهداری کنی
و هنگام استفاده تبدیلشون کنی. ( اصلاً هم غیر ممکن نیست و به راحتی جواب می‌ده ) اما آیا این کار صحیح هست؟

صبا صبوحی

حسین.کاظمی
شنبه 16 اسفند 1393, 06:54 صبح
خیلی ممنون از پاسخ هاتون
ولی نگفتید چیکار کنم؟

gerdioz
شنبه 16 اسفند 1393, 07:42 صبح
ممنون از پاسختون
میشه فیلد تاریخ را رشته ایی گرفت و بعداً میشه بین دوتاریخ جست و جو کرد یا باید حتما نوع فیلد تاریخ باشه؟
سلام
دوست عزیز بنده هم بااین نوع روش موافق هستم من یک کلاس ایجاد کرم که می تونه تمام عملیات روی تاریخ خای میلادی و شمسی رو انجام بده
129220129220

حسین.کاظمی
شنبه 16 اسفند 1393, 08:30 صبح
سلام
دوست عزیز بنده هم بااین نوع روش موافق هستم من یک کلاس ایجاد کرم که می تونه تمام عملیات روی تاریخ خای میلادی و شمسی رو انجام بده
129220129220

سلام و تشکر بابت راهنمایت
اگه میشه یه نمونه برنامه کوچیک کار با این کلاس را واسم بزارید ممنون میشم

SabaSabouhi
شنبه 16 اسفند 1393, 09:03 صبح
خیلی ممنون از پاسخ هاتون
ولی نگفتید چیکار کنم؟

سلام
دوست عزیز، تاریخ رو به صورت تاریخ نگهداری کن. به همین راحتی. در مورد نمایش کافیه این تاریخ رو به تاریخ شمسی تبدیل کنی.
برای تبدیل تاریخ میلادی به شمسی از تابعی که من در تالار T-Sql گذاشتم ( اخیراً ) استفاده کن.

صبا صبوحی

حسین.کاظمی
شنبه 16 اسفند 1393, 09:18 صبح
سلام
دوست عزیز، تاریخ رو به صورت تاریخ نگهداری کن. به همین راحتی. در مورد نمایش کافیه این تاریخ رو به تاریخ شمسی تبدیل کنی.
برای تبدیل تاریخ میلادی به شمسی از تابعی که من در تالار T-Sql گذاشتم ( اخیراً ) استفاده کن.

صبا صبوحی

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

SabaSabouhi
شنبه 16 اسفند 1393, 12:19 عصر
جناب آقای صبوحی تشکر هم بابت راهنمایی و هم تابع؛ولی من فعلا در این نرم افزارم از بانک اکسس استفاده کردم در مورد این بانک چه راه حلی را پیشنهاد می کنید؟؟؟
سلام
شما همون تاریخ میلادی رو بازیابی کن، تو برنامه تبدیلش کن به شمسی. ( هنگام نمایش )
می‌تونی این کار رو در سطح کنترل‌ها انجام بدی ( کنترل خودت رو از کنترل اصلی inherit کنی و . . . )
یا این که datasource رو که ایجاد کردی یه فیلد تاریخ شمسی بهش اضافه کنی و اونجا تبدیلش کنی.
اگه Wpf کار می‌کردی که خیلی ساده‌تر هم بود، کافی بود یه converter بنویسی و تمام.

صبا صبوحی

حسین.کاظمی
شنبه 16 اسفند 1393, 13:39 عصر
سوال من اینکه وقتی برج 2 شمسی 31روزه است ولی میلادی 28روز
برای ثبت وبازیابی تاریخ های 29.30.31 چگونه است؟؟؟

Mahmoud.Afrad
شنبه 16 اسفند 1393, 14:04 عصر
سوال من اینکه وقتی برج 2 شمسی 31روزه است ولی میلادی 28روز
برای ثبت وبازیابی تاریخ های 29.30.31 چگونه است؟؟؟

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

SabaSabouhi
شنبه 16 اسفند 1393, 18:55 عصر
وقتی قراره تاریخ میلادی ذخیره بشه ، باید تاریخ شمسی رو بعد از دریافت از کاربر به میلادی تبدیل و بعد ذخیره کنی تا مشکلی ایجاد نشه.
موقع بازیابی تاریخ میلادی رو به شمسی تبدیل کنید.

سلام
دوست عزیز، همونطور که دوستمون Mahmoud.Afrad نوشته، شما باید تاریخ ذخیره کنی. وقتی تاریخ ذخیره کردی دیگه میلادی و شمسی نداره.
برای ذخیره‌ی تاریخ باید اون رو به صورت میلادی بدی و موقع بازیابی هم به شکل میلادی تحویل بگیری. وقتی مایکروسافت تصمیم گرفت تاریخ شمسی رو پشتیبانی کنه
که با توجه به قول‌های داده شده برای ویندوز 10 و رفع تحریم‌ها احتمالاً به زودی شاهد این قضیه هم خواهیم بود. شما وقتی تاریخ رو به صورت «تاریخ» ثبت کنی
کار درست رو انجام دادی. الان باید یه متد برای تبدیل تاریخ داشته باشی. اما با پشتیبانی تاریخ شمسی توسط مایکروسافت، بدون تغییر تو دیتابیس، فقط متد تبدیل
تاریخ رو حذف می‌کنی و به راحتی با دیتابیس کار می‌کنی.

صبا صبوحی