PDA

View Full Version : سوال: چه جوری میتونم به یک تاریخ شمسی یک ماه اضافه کنم ؟



iman_vakilian
جمعه 27 اردیبهشت 1387, 00:32 صبح
چه جوری میتونم به یک تاریخ شمسی یک ماه اضافه کنم ؟:عصبانی++:

با vb.net برنامه می نویسم وبرای تبدیل تاریخ شمسی از یک dllاستفاده می کنم

Dariuosh
جمعه 27 اردیبهشت 1387, 01:35 صبح
شما براي استفاده از تازيخ شمسي از چه برنامه ايي استفاده ميکنيد ؟

masoodp666
جمعه 27 اردیبهشت 1387, 10:41 صبح
چه جوری میتونم به یک تاریخ شمسی یک ماه اضافه کنم ؟:عصبانی++:


با کد زیر میتونی 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)

Dariuosh
جمعه 27 اردیبهشت 1387, 11:06 صبح
وبرای تبدیل تاریخ شمسی از یک dllاستفاده می کنم
خوب چون DLLها با هم فرق دارن يعني هر کي هر طور دوست داشته يا بلد بوده کد کرده متد استانداردي برا کاراشون ندارند پس بايد خودت پيدا کني شايدم اصلاً نداشته باشه
به نظرم بهتره از کلاس خوده مايکروسافت استفاده کني که ديگه درگيره اينجور داستانا نشي

System.Globalization.PersianCalendar

iman_vakilian
جمعه 27 اردیبهشت 1387, 12:17 عصر
متشکر از شما دوستان عزیر داریوش جان و مسعود جان

raravaice
جمعه 27 اردیبهشت 1387, 12:51 عصر
یه نکته رو به یاد داشته باش که:



System.Globalization.PersianCalendar
برای اضافه کردن ماه باگ داره! که میاد بر اساس ماههای میلادی به تاریخ شمسی فعلی اضافه میکنه که یه روز جلو ، عقب میشه.
پستش یادم نیست کجاست ، سرچ سایت هم خراب هست وگرنه منبع اونو که دوستان بهش اشاره کرده بودن بهت میگفتم.

موفق باشید

Dariuosh
جمعه 27 اردیبهشت 1387, 14:22 عصر
یه نکته رو به یاد داشته باش که:



System.Globalization.PersianCalendar
برای اضافه کردن ماه باگ داره! که میاد بر اساس ماههای میلادی به تاریخ شمسی فعلی اضافه میکنه که یه روز جلو ، عقب میشه.
پستش یادم نیست کجاست ، سرچ سایت هم خراب هست وگرنه منبع اونو که دوستان بهش اشاره کرده بودن بهت میگفتم.

موفق باشید
احتمالاً يه باگ بوده که رفع شده چون الان هر چي که چک کردم غلط بر نميگردوند !
البته من VS2008 دارم استفاده ميکنم

Sub Zero
جمعه 27 اردیبهشت 1387, 22:01 عصر
احتمالاً يه باگ بوده که رفع شده چون الان هر چي که چک کردم غلط بر نميگردوند !
البته من VS2008 دارم استفاده ميکنم
من از vs2005 استفاده میکنم اگه امکان داره موارد زیر رو هم VS2008 چک کنید ببینید درست جواب میده ? :

Dim Cal As New System.Globalization.PersianCalendar
MsgBox(Cal.AddDays("87/07/01", -1))
MsgBox(Cal.AddDays("87/06/31", -1))
توضیح : نمایش تاریخ روز قبل

linux
جمعه 27 اردیبهشت 1387, 22:49 عصر
من از vs2005 استفاده میکنم اگه امکان داره موارد زیر رو هم 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 روزه هست!
حتما به نوع داده های آرگومنتهایی که با توابع می فرستید دقت کنید

linux
جمعه 27 اردیبهشت 1387, 22:58 عصر
احتمالاً يه باگ بوده که رفع شده چون الان هر چي که چک کردم غلط بر نميگردوند !
البته من VS2008 دارم استفاده ميکنم
باگ نبوده بی دقی برنامه نویسان هست!

linux
جمعه 27 اردیبهشت 1387, 23:04 عصر
چه جوری میتونم به یک تاریخ شمسی یک ماه اضافه کنم ؟:عصبانی++:

با vb.net برنامه می نویسم وبرای تبدیل تاریخ شمسی از یک dllاستفاده می کنم


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)));

Dariuosh
شنبه 28 اردیبهشت 1387, 00:16 صبح
من از vs2005 استفاده میکنم اگه امکان داره موارد زیر رو هم 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 روزه هست!
حتما به نوع داده های آرگومنتهایی که با توابع می فرستید دقت کنید

در مورد اول که درست برميگردونه مورد دوم هم حق با آقاي linux هست

linux
شنبه 28 اردیبهشت 1387, 08:00 صبح
در مورد اول که درست برميگردونه مورد دوم هم حق با آقاي linux هست
مورد اول هم باز شما از 1 جولای 1987 یک روز کم کردید میشه 30 جون 1987 هیچ ربطی به 1 مهر 87 نداره. و 31 شهریور سال 87 نداره.
اگر از 1 مهرماه 87 یک روز کم کنیم میشه 31 شهریور سال 87، باز این کدی که شما استفاده می کنید، جوابی که شما ازش می خواهید را برنمی گرداند،به هر حال کد صحیح را چند پست قبل تر گذاشتم.
در هر دو مورد نادرست برمی گردونه! مورد اولی آنقدر روشن بود که در موردش توضیح ندادم شما هم دقت نکردید که اگر 1 روز از 1 مهر 87 1 روز کم کنید و 30 شهریور جواب بگیرید ، نادرست هست.

مورد تقویم فارسی آنقدر تو این فروم مطرح شده که دیگر از حالت سوال خارج شده و به مسخره بازی تبدیل شده، همه ی این موارد هم در پست های 2 سال پیش جواب داده شده. کاش سیستم آنقدر هوشمند بود که نمی گذاشت اصلا همچین پستهای ارسال بشوند.

Sub Zero
شنبه 28 اردیبهشت 1387, 10:08 صبح
همه ی این موارد هم در پست های 2 سال پیش جواب داده شده. کاش سیستم آنقدر هوشمند بود که نمی گذاشت اصلا همچین پستهای ارسال بشوند.
جناب linux هدف من از ارسال این پست بررسی وضعیت PersianCalendar در Vs2008 بود فکر نمیکنم دوسال پیش Vs2008 وجود داشت .



احتمالاً يه باگ بوده که رفع شده چون الان هر چي که چک کردم غلط بر نميگردوند !

در مورد اول که درست برميگردونه مورد دوم هم حق با آقاي linux هست
ممکنه بگین شما چیا رو چک کردین؟ یه بار می گین غلط برنمیگردونه یه بار میگین اشتباه برمیگردونه

linux
شنبه 28 اردیبهشت 1387, 10:47 صبح
جناب linux هدف من از ارسال این پست بررسی وضعیت PersianCalendar در Vs2008 بود فکر نمیکنم دوسال پیش Vs2008 وجود داشت .
ممکنه بگین شما چیا رو چک کردین؟ یه بار می گین غلط برنمیگردونه یه بار میگین اشتباه برمیگردونه
لیست تغییرات در msdn هست هر چیزی که تغییر کرده باشد یا حذف شده باشد یا به تازگی
به فریم ورک اضافه شده باشد.
کلا ورودی متدهای adddays, addmonth,... یک تاریخ میلادی هست خروجیش هم تاریخ میلادی هست، بعضی ها به این نکته توجه نکردند و این را به عنوان باگ مطرح کردند.

Dariuosh
شنبه 28 اردیبهشت 1387, 10:50 صبح
یه نکته رو به یاد داشته باش که:



System.Globalization.PersianCalendar
برای اضافه کردن ماه باگ داره! که میاد بر اساس ماههای میلادی به تاریخ شمسی فعلی اضافه میکنه که یه روز جلو ، عقب میشه.
پستش یادم نیست کجاست ، سرچ سایت هم خراب هست وگرنه منبع اونو که دوستان بهش اشاره کرده بودن بهت میگفتم.

موفق باشید


من از vs2005 استفاده میکنم اگه امکان داره موارد زیر رو هم 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 روزه هست!
حتما به نوع داده های آرگومنتهایی که با توابع می فرستید دقت کنید

آقاي raravaice يه نکته در مورد اضافه کردن ماه فرمودند من چک کردم مشکلي نديدم
شما هم فرموديد که چک کنم ، کم کردنه روز رو در اون 2 تاريخ خاص قبل از جوابه من آقاي Linux يه جواب دادند که من بهش استناد کردم همين الان مشکلش چي بود

Dariuosh
شنبه 28 اردیبهشت 1387, 11:02 صبح
مورد اول هم باز شما از 1 جولای 1987 یک روز کم کردید میشه 30 جون 1987 هیچ ربطی به 1 مهر 87 نداره. و 31 شهریور سال 87 نداره.
اگر از 1 مهرماه 87 یک روز کم کنیم میشه 31 شهریور سال 87، باز این کدی که شما استفاده می کنید، جوابی که شما ازش می خواهید را برنمی گرداند،به هر حال کد صحیح را چند پست قبل تر گذاشتم.
در هر دو مورد نادرست برمی گردونه! مورد اولی آنقدر روشن بود که در موردش توضیح ندادم شما هم دقت نکردید که اگر 1 روز از 1 مهر 87 1 روز کم کنید و 30 شهریور جواب بگیرید ، نادرست هست.

مورد تقویم فارسی آنقدر تو این فروم مطرح شده که دیگر از حالت سوال خارج شده و به مسخره بازی تبدیل شده، همه ی این موارد هم در پست های 2 سال پیش جواب داده شده. کاش سیستم آنقدر هوشمند بود که نمی گذاشت اصلا همچین پستهای ارسال بشوند.
خوب منم قصد برگردوندنه شمسي نداشتم که !!
چون بعد از اجرا همون کد مينويسه 1987 !

touraj
یک شنبه 29 اردیبهشت 1387, 15:35 عصر
ببخشید، من یه سوال دارم. این تقویم فارسی میکروسافت رو میشه مثل Month Calender به فرم اضافه کرد؟

kamranwolf
یک شنبه 25 اردیبهشت 1390, 23:52 عصر
استفاده از System.Globalization.PersianCalendar هیچ باگی نداره من این رو تو تموم برنامه هام استفاده کردم و بعد از گذشت چند سال ازاستفاده برنامه هام هنوز شرکت های مورد قراردادم به این نوع باگ برخورد نکرده اند:متعجب: