PDA

View Full Version : تشخیص سال کبیسه در کلاس PersianCalendar



ashkan209
سه شنبه 01 تیر 1389, 21:33 عصر
دوستان همونطور که میدونید از دات نت 2 کلاس PersianCalendar به این فریمورک اضافه شد، که بهترین امکان برای کار با تاریخ فارسی و تبدیل به میلادی و ... هست
اما سوال من اینه که با استفاده از این این کلاس چطور میتونیم سال کبیسه را تشخیص بدیم ؟
نمیخوام از هیچگونه کامپوننت یا dll جداگونه استفاده کنم

alireza_s_84
سه شنبه 01 تیر 1389, 22:30 عصر
دوستان همونطور که میدونید از دات نت 2 کلاس PersianCalendar به این فریمورک اضافه شد، که بهترین امکان برای کار با تاریخ فارسی و تبدیل به میلادی و ... هست
اما سوال من اینه که با استفاده از این این کلاس چطور میتونیم سال کبیسه را تشخیص بدیم ؟
نمیخوام از هیچگونه کامپوننت یا dll جداگونه استفاده کنم

سلام دوست عزیز:
این کلاس یک متد داره بنام IsLeapYear که یک سال رو میگیره و نتیجه رو بصورت True|False برگشت میده. در پیاده سازی این تابع از یک آرایه و یک تقسیم کوچک برای تشخیص سال کبیسه استفاده شده:
میدونیم که در هر 33 سال 8 بار سال کبیسه اتفاق میفته با این حساب یک آرایه با 33 عضو خواهیم داشت که سه یکی درمیون مقدار 0 و 1 میگیرن. یعنی به شکل زیر:

LeapYears33 = new int[] {
0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,
0
};

حالا با یک تقسیم ساده و بدست آوردن باقیمانده میتونیم سال کبیسه رو معین کنیم:
(LeapYears33[year % 33] == 1);

کل بدنه تابع هم میشه این:


function IsLeapYear(int year)
{
int[] LeapYears33 = new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 };
return (LeapYears33[year % 33] == 1);
}

اینم توضیحات بیشتر (http://fa.wikipedia.org/wiki/%D8%B3%D8%A7%D9%84_%DA%A9%D8%A8%DB%8C%D8%B3%D9%87)
موفق باشید

b.mahsa
سه شنبه 01 تیر 1389, 22:55 عصر
این کد فکر کنم جواب میده



Dim p As New Globalization.PersianCalendar
If p.IsLeapYear(1388) Then

End If

ashkan209
سه شنبه 01 تیر 1389, 23:05 عصر
با تشکر از دوستان که جواب دادند
و مشکل رو حل کردند
بازم سپاس