behzad1986
یک شنبه 08 فروردین 1389, 08:41 صبح
سلام دوستان
من در حال نوشتن يه پروژه بودم كه نياز به گزارش گيري شدم كه در اون بايد تاريخ و به شمسي نمايش مي دادم واسه همين به دنبال روشي براي اين كار گشتم تنها راهي كه پيدا كردم استفاده از dll هايي كه تعداي از برنامه نويسا واسه تبديل تاريخ نوشته بودن كه يه كم استفاده از اونا مشكل بود منم يه تابع براي اينكار نوشتم و كد به زبان C# تو بخش #C هم قرار مي دم
اين كد براي 1000 سال تست شده!!!
Function (datevar MyDate)
(
numbervar MyYear:=year(MyDate);
numbervar MyMonth:=month(MyDate);
numbervar MyDay:=datepart('D',MyDate);
numbervar array DaysToMonth365 := [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 ];
numbervar array DaysToMonth366 := [ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 ];
numbervar array DaysToMonth := [ 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336 ];
numbervar array LeapYears33 := [ 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 ];
booleanvar IsLeapYear;
if ((myyear mod 4) <> 0) then
IsLeapYear := false
else if ((myyear mod 100) = 0) then
IsLeapYear := ((myyear mod 400) = 0)
else
IsLeapYear := true;
numbervar array numArray1;
if (IsLeapYear) then
numArray1 := DaysToMonth366
else
numArray1 := DaysToMonth365;
numberVar num1 := int( myyear - 1);
numberVar num2 := int(((((((num1 * 365) + (num1 / 4)) - (num1 / 100)) + (num1 / 400)) + numArray1[mymonth]) + myday) - 1);
numberVar num4 := num2 + 1;
numberVar PersianYear := int((((num4 - 226894) * 33) / (12053)))+ 1;
numberVar numtmp2 :=int( (PersianYear - 1) / 33);
numberVar yeartmp := int((PersianYear - 1) mod 33);
numberVar num5 := (numtmp2 * 12053) + 226894;
while (yeartmp > 0) do
(
num5 := num5 + 365;
if (LeapYears33[(yeartmp Mod 33)+1] = 1) then
num5 := num5 + 1;
yeartmp := yeartmp - 1
);
numberVar num6;
num5;
if (PersianYear = 9378) then
num6 := DaysToMonth[10] + 10
else if (LeapYears33[(PersianYear Mod 33)+1] <> 1) then
num6 := 365
else
num6 := 366;
if (num4 < num5) then
(
num5 := num5 - num6;
PersianYear := PersianYear - 1;
)
else if (num4 = num5) then
(
PersianYear := PersianYear - 1;
numberVar temp;
if (PersianYear = 9378) then
temp := DaysToMonth[10] + 10
else if (LeapYears33[(PersianYear mod 33)+1] <> 1) then
temp := 365
else
temp := 366;
num5 := num5 - temp
)
else if (num4 > (num5 + num6)) then
(
num5 := num5 + num6;
PersianYear:=PersianYear+1
);
num4:= num4 - num5;
numberVar num12 := 0;
while ((num12 < 12) and (num4 > DaysToMonth[num12+1])) do
(
num12:=num12+1;
);
numberVar num3 := int(num4) - DaysToMonth[num12];
Stringvar Text :=Cstr( PersianYear,'0000')+'/'+Cstr(num12,'00')+'/'+Cstr(num3,'00');
)
يه تابعه و طريقه استفاده از اون هم ...
ConvertDateToPersianDate(CurrentDate );
اين هم لينك كد C#
http://barnamenevis.org/forum/showthread.php?p=939766#post939766
من در حال نوشتن يه پروژه بودم كه نياز به گزارش گيري شدم كه در اون بايد تاريخ و به شمسي نمايش مي دادم واسه همين به دنبال روشي براي اين كار گشتم تنها راهي كه پيدا كردم استفاده از dll هايي كه تعداي از برنامه نويسا واسه تبديل تاريخ نوشته بودن كه يه كم استفاده از اونا مشكل بود منم يه تابع براي اينكار نوشتم و كد به زبان C# تو بخش #C هم قرار مي دم
اين كد براي 1000 سال تست شده!!!
Function (datevar MyDate)
(
numbervar MyYear:=year(MyDate);
numbervar MyMonth:=month(MyDate);
numbervar MyDay:=datepart('D',MyDate);
numbervar array DaysToMonth365 := [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 ];
numbervar array DaysToMonth366 := [ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 ];
numbervar array DaysToMonth := [ 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336 ];
numbervar array LeapYears33 := [ 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 ];
booleanvar IsLeapYear;
if ((myyear mod 4) <> 0) then
IsLeapYear := false
else if ((myyear mod 100) = 0) then
IsLeapYear := ((myyear mod 400) = 0)
else
IsLeapYear := true;
numbervar array numArray1;
if (IsLeapYear) then
numArray1 := DaysToMonth366
else
numArray1 := DaysToMonth365;
numberVar num1 := int( myyear - 1);
numberVar num2 := int(((((((num1 * 365) + (num1 / 4)) - (num1 / 100)) + (num1 / 400)) + numArray1[mymonth]) + myday) - 1);
numberVar num4 := num2 + 1;
numberVar PersianYear := int((((num4 - 226894) * 33) / (12053)))+ 1;
numberVar numtmp2 :=int( (PersianYear - 1) / 33);
numberVar yeartmp := int((PersianYear - 1) mod 33);
numberVar num5 := (numtmp2 * 12053) + 226894;
while (yeartmp > 0) do
(
num5 := num5 + 365;
if (LeapYears33[(yeartmp Mod 33)+1] = 1) then
num5 := num5 + 1;
yeartmp := yeartmp - 1
);
numberVar num6;
num5;
if (PersianYear = 9378) then
num6 := DaysToMonth[10] + 10
else if (LeapYears33[(PersianYear Mod 33)+1] <> 1) then
num6 := 365
else
num6 := 366;
if (num4 < num5) then
(
num5 := num5 - num6;
PersianYear := PersianYear - 1;
)
else if (num4 = num5) then
(
PersianYear := PersianYear - 1;
numberVar temp;
if (PersianYear = 9378) then
temp := DaysToMonth[10] + 10
else if (LeapYears33[(PersianYear mod 33)+1] <> 1) then
temp := 365
else
temp := 366;
num5 := num5 - temp
)
else if (num4 > (num5 + num6)) then
(
num5 := num5 + num6;
PersianYear:=PersianYear+1
);
num4:= num4 - num5;
numberVar num12 := 0;
while ((num12 < 12) and (num4 > DaysToMonth[num12+1])) do
(
num12:=num12+1;
);
numberVar num3 := int(num4) - DaysToMonth[num12];
Stringvar Text :=Cstr( PersianYear,'0000')+'/'+Cstr(num12,'00')+'/'+Cstr(num3,'00');
)
يه تابعه و طريقه استفاده از اون هم ...
ConvertDateToPersianDate(CurrentDate );
اين هم لينك كد C#
http://barnamenevis.org/forum/showthread.php?p=939766#post939766