PDA

View Full Version : در مورد تاریخ شمسی در VB احتیاج به راهنمایی



jafaripur
دوشنبه 31 اردیبهشت 1386, 14:05 عصر
خوب دوستان یه سوال یعنی مشکل پیش اومده اونم اینه که :
چون دومین ماه تاریخ میلادی 28 و گاهی 29 روز هستش نمی توان 1385/02/30 را در متغییر Date گذاشت .
یعنی :

Dim A as Date
A = #1385/02/31#


و یا :



Dim A as Date
A = #1385/02/31#
A = A - 7


مثلاً به این هم خطا میده :


StrSql = "SELECT * FROM Member WHERE Date =#" & cvdate(txtdate.text) & "#"f



یعنی خطا میده Type MisMath میده . :عصبانی++:

چطوری می شه این مشکل را حل کرد .

Keramatifar
دوشنبه 31 اردیبهشت 1386, 14:26 عصر
دوست عزیز
باید تاریخ رو اگر می خواهی شمسی ذخیره کنی با استفاده از کلاس:
System.Globalization.PersianCalendar
تاریخ میلادی رو به شمسی تبدیل کنی

و اگر می خواهی شمسی رو بصورت میلادی ذخیره کنی با استفاده از کلاس:
System.Globalization.GregorianCalendar

تاریخ شمسی رو به میلادی تبدیل کن

h_sadeghynejad
دوشنبه 31 اردیبهشت 1386, 14:33 عصر
به نظر من بهتره که برای ذخیره تاریخ از نوع رشته ای استفاده کنی این طوری یه خورده راحت تری

اَرژنگ
دوشنبه 31 اردیبهشت 1386, 16:39 عصر
دوست عزیز
باید تاریخ رو اگر می خواهی شمسی ذخیره کنی با استفاده از کلاس:
System.Globalization.PersianCalendar
تاریخ میلادی رو به شمسی تبدیل کنی

و اگر می خواهی شمسی رو بصورت میلادی ذخیره کنی با استفاده از کلاس:
System.Globalization.GregorianCalendar

تاریخ شمسی رو به میلادی تبدیل کن

VB not VB.net

jafaripur
دوشنبه 31 اردیبهشت 1386, 23:39 عصر
کسی نبود عجله ای هستش ؟

h_sadeghynejad
دوشنبه 31 اردیبهشت 1386, 23:44 عصر
فکر کنم برای این کار باید تاریخ رو تبدیل به میلادی کنی و توی اون متغیر یا دیتابیس خودت بریزی و بعدا بازیابی کنی و دوباره اون رو تبدیل به شمسی کنی

jafaripur
دوشنبه 31 اردیبهشت 1386, 23:46 عصر
نمیشه ؟
می خوام ما بین دو تاریخ : 1386/02/31 و 1386/02/20 رو از پایگاه داده استخراج کنم ولی چون تو تاریخ میلادی دومین ماه که فوریه می شه 28 و 29 روز هستش 2/21 را خطا می گیره ؟

h_sadeghynejad
دوشنبه 31 اردیبهشت 1386, 23:47 عصر
این هم یه shamsi.dll که یه سری توابع کامل برای کار با تاریخ داره
8575
اگه مشکل با هاش داشتی بگو

h_sadeghynejad
دوشنبه 31 اردیبهشت 1386, 23:51 عصر
در کل به نظر من اگه بیای و تاریخ رو به صورت رشته ای و بدون اسلش (/) ذخیره کنی بهتره و بعدش هم برای چک کردن فاصله دو تا تاریخ راحت تر هستی

jafaripur
دوشنبه 31 اردیبهشت 1386, 23:53 عصر
مشکل نیست من فقط می خوام برا این مشکل راه حل بشه .
نه عزیز منظور تبدیل میلادی به شمسی نیست .
مشکل قرار دادن 1386/02/31 در متغییر Date هستش .

CodeMasterX
سه شنبه 01 خرداد 1386, 00:45 صبح
شما نمیتونی تاریخی که روز 31 داره رو تو تاریخ Date بریزی چون بصورت میلادی مدیریت خواهد شد.اولا سعی کن تواریخ رو بصورت رشته ای ذخیره کنی و باهاشون کارکنی.دوم اینکه نیازی نیست برای محاسبات حتما بریزیشون توی متغیر های Date.
برای استفاده از تواریخ شمسی هم میتونی از کدهایی که توی بخش "مشکلات فارسی و ..." گذاشته شده استفاده کنی و یا کنترل Payam.Calendar که آقای پیام مرادی لطف کردن و تو سایت گذاشتن.

h_sadeghynejad
سه شنبه 01 خرداد 1386, 11:35 صبح
من هم همینطوری فکر میکردم چون متغیر از نوع date مقادیرش این طوری تعریف شده و نمیتونی خارج از اون بهش داده بدی

Mbt925
سه شنبه 01 خرداد 1386, 14:26 عصر
یه راه هست
اونم اینکه حداکثر روزی که توی متغییر از نوع Date ذخیره می کنیم 28 باشه و اختلاف روز واقعی تا 28 رو کنارش ذخیره کنیم ، مثلا :


Type TNewDate

MainDate as Date
Diff as Integer

End Type

که توی این ساختار تاریخ در متغیر MainDate ذخیره میشه و اگه روزش بیشتر از 28 بود ، اضافیش توی متغیر Diff.

البته راهی که گفته شد برای وقتیه که نخواین از راه هایی که دوستان گفتن استفاده کنین.