سلام
تبريک ميگه.با خوده تقويم فارسي دات نت تست کردم.کاملا درست عمل مي کرد.کد تست اين بود:
class TestData
{
System.Globalization.Calendar calendar = new System.Globalization.PersianCalendar();
string[] DayName = new string[] { "شنبه", "يکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنج شنبه", "جمعه" };
public void Run()
{
int y, m, d,wd1,wd2;
for(y=1;y<4000;y++)
{
for(m=1;m<13;m++)
{
for(d=1;d<31;d++)
{
wd1 = WeekDayDotNet(y,m,d);
if(wd1!=-1)
{
wd2 = WeekDayNew(y,m,d);
if(wd1!=wd2)
Console.WriteLine("{0}/{1:D2}/{2:D2} Correct = {3} , Spript = {4}",
y,m,d,wd1,wd2);
}
}
}
}
}
protected int WeekDayDotNet(int y, int m, int d)
{
try
{
DateTime dt = new DateTime(y, m, d, calendar);
return ((int)calendar.GetDayOfWeek(dt) + 1) % 7;
}
catch (Exception e)
{
}
return -1;
}
protected int WeekDayNew(int y, int m, int d)
{
int l,n,z,g,f,s,q;
l = (y+10) % 231;
n = l / 33;
z = (7 - n) % 7;
g = l % 33;
if(g==32)
f = ((g / 4) - 2 + g + z) % 7;
else
f = ((g / 4) - 1 + g + z) % 7;
if(m<7)
s = ((((m - 1) * 31) + d) % 7) + f - 1;
else
s = ((((m - 7) * 30) + d + 4) % 7) + f - 1;
q = (s + 7) % 7;
return q;
}
}
در ضمن پيشنهاد ميکنه موارد زير رو بهش اضافه کنيد تا يک کلاس کارآمد شود و در تمام زيانهاي برنامه نويسي قابل استفاده گردد.
1) محاسبه فاصله تاريخ جاري (مثلا 87/7/29) تا 1/1/1 شمسي به تعداد روز (با توجه به برنامه بالا خيلي کار ندارد) و بلاعکس (تبديل تعداد روز گذشته از 1/1/1 به تاريخ جاري)
2) با استفاه از متد کار شده در قسمت اول ،محاسبه اختلاف و جمع دو تاريخ (هر دو تبديل به اختلاف به روز اول از 1/1/1 شد و مشخص مي شود).
3) تبديل تاريخ شمسي به ميلادي و بلاعکس (با استفاده از همان متد معرفي شذه در 1 واينکه 1/1/1 معادل 19 ژانويه 622 است ، البته اگر اشتباه نکرده باشم) و استفاده از يافتن تفاوت در تقويم ميلادي (که در همه زبانها موجود است).
درضمن دنبال اون مقاله (استاد بیرشک) روی نت گشتم،پیدا نکردمش.توی فایل های ذخیره شده قدیمی خودم هم نبود.با این حال اگر دیدمش،براتون لینک میدم.
موفق باشيد