ashkan209
سه شنبه 01 تیر 1389, 22:33 عصر
دوستان همونطور که میدونید از دات نت 2 کلاس PersianCalendar به این فریمورک اضافه شد، که بهترین امکان برای کار با تاریخ فارسی و تبدیل به میلادی و ... هست
اما سوال من اینه که با استفاده از این این کلاس چطور میتونیم سال کبیسه را تشخیص بدیم ؟
نمیخوام از هیچگونه کامپوننت یا dll جداگونه استفاده کنم
alireza_s_84
سه شنبه 01 تیر 1389, 23: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, 23:55 عصر
این کد فکر کنم جواب میده
Dim p As New Globalization.PersianCalendar
If p.IsLeapYear(1388) Then
End If
ashkan209
چهارشنبه 02 تیر 1389, 00:05 صبح
با تشکر از دوستان که جواب دادند
و مشکل رو حل کردند
بازم سپاس
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.