چه جوری میتونم به یک تاریخ شمسی یک ماه اضافه کنم ؟
با vb.net برنامه می نویسم وبرای تبدیل تاریخ شمسی از یک dllاستفاده می کنم
چه جوری میتونم به یک تاریخ شمسی یک ماه اضافه کنم ؟
با vb.net برنامه می نویسم وبرای تبدیل تاریخ شمسی از یک dllاستفاده می کنم
آخرین ویرایش به وسیله iman_vakilian : جمعه 27 اردیبهشت 1387 در 09:44 صبح
شما براي استفاده از تازيخ شمسي از چه برنامه ايي استفاده ميکنيد ؟
با کد زیر میتونی X ماه به تاریخ الان شمسی اضافه کنی و در یه TextBox بریزی.
Dim Cal As New System.Globalization.PersianCalendar
Dim MyDate As Date
MyDate = Cal.AddMonths(DateTime.Now, X)
TextBox.Text = Cal.GetYear(MyDate) & Cal.GetMonth(MyDate) & Cal.GetDayOfMonth(MyDate)
خوب چون DLLها با هم فرق دارن يعني هر کي هر طور دوست داشته يا بلد بوده کد کرده متد استانداردي برا کاراشون ندارند پس بايد خودت پيدا کني شايدم اصلاً نداشته باشه
به نظرم بهتره از کلاس خوده مايکروسافت استفاده کني که ديگه درگيره اينجور داستانا نشي
System.Globalization.PersianCalendar
متشکر از شما دوستان عزیر داریوش جان و مسعود جان
یه نکته رو به یاد داشته باش که:
برای اضافه کردن ماه باگ داره! که میاد بر اساس ماههای میلادی به تاریخ شمسی فعلی اضافه میکنه که یه روز جلو ، عقب میشه.
System.Globalization.PersianCalendar
پستش یادم نیست کجاست ، سرچ سایت هم خراب هست وگرنه منبع اونو که دوستان بهش اشاره کرده بودن بهت میگفتم.
موفق باشید
من از vs2005 استفاده میکنم اگه امکان داره موارد زیر رو هم VS2008 چک کنید ببینید درست جواب میده ? :احتمالاً يه باگ بوده که رفع شده چون الان هر چي که چک کردم غلط بر نميگردوند !
البته من VS2008 دارم استفاده ميکنم
Dim Cal As New System.Globalization.PersianCalendar
MsgBox(Cal.AddDays("87/07/01", -1))
MsgBox(Cal.AddDays("87/06/31", -1))
توضیح : نمایش تاریخ روز قبل
به روشنی و آشکارا مقدار برگشتی کدی که نوشتید با آن چیزی که شما انتظار دارید یکی نخواهد بود، شما از روز 31 ماه جون سال 1987 یک روز کم کردید که می شود 30 جون سال 1987.
در اینجا حتما یک خطا خواهید گرفت برای اینکه ماه جون 30 روزه هست!
حتما به نوع داده های آرگومنتهایی که با توابع می فرستید دقت کنید
System.Globalization.PersianCalendar cal = new System.Globalization.PersianCalendar();
DateTime d;
d = cal.AddDays(cal.ToDateTime(87, 6, 31, 0, 0, 0, 0), -1);
MessageBox.Show(string.Format("{0}/{1}/{2}"
,cal.GetYear(d),cal.GetMonth(d),cal.GetDayOfMonth (d)));
System.Globalization.PersianCalendar cal = new System.Globalization.PersianCalendar();
DateTime d;
d = cal.AddMonths(cal.ToDateTime(87, 6, 31, 0, 0, 0, 0), 1);
MessageBox.Show(string.Format("{0}/{1}/{2}",
cal.GetYear(d),cal.GetMonth(d),cal.GetDayOfMonth (d)));
مورد اول هم باز شما از 1 جولای 1987 یک روز کم کردید میشه 30 جون 1987 هیچ ربطی به 1 مهر 87 نداره. و 31 شهریور سال 87 نداره.
اگر از 1 مهرماه 87 یک روز کم کنیم میشه 31 شهریور سال 87، باز این کدی که شما استفاده می کنید، جوابی که شما ازش می خواهید را برنمی گرداند،به هر حال کد صحیح را چند پست قبل تر گذاشتم.
در هر دو مورد نادرست برمی گردونه! مورد اولی آنقدر روشن بود که در موردش توضیح ندادم شما هم دقت نکردید که اگر 1 روز از 1 مهر 87 1 روز کم کنید و 30 شهریور جواب بگیرید ، نادرست هست.
مورد تقویم فارسی آنقدر تو این فروم مطرح شده که دیگر از حالت سوال خارج شده و به مسخره بازی تبدیل شده، همه ی این موارد هم در پست های 2 سال پیش جواب داده شده. کاش سیستم آنقدر هوشمند بود که نمی گذاشت اصلا همچین پستهای ارسال بشوند.
جناب linux هدف من از ارسال این پست بررسی وضعیت PersianCalendar در Vs2008 بود فکر نمیکنم دوسال پیش Vs2008 وجود داشت .نوشته شده توسط Linux
نوشته شده توسط Dariuosh
ممکنه بگین شما چیا رو چک کردین؟ یه بار می گین غلط برنمیگردونه یه بار میگین اشتباه برمیگردونهنوشته شده توسط Dariuosh
ببخشید، من یه سوال دارم. این تقویم فارسی میکروسافت رو میشه مثل Month Calender به فرم اضافه کرد؟
استفاده از System.Globalization.PersianCalendar هیچ باگی نداره من این رو تو تموم برنامه هام استفاده کردم و بعد از گذشت چند سال ازاستفاده برنامه هام هنوز شرکت های مورد قراردادم به این نوع باگ برخورد نکرده اند![]()