وبلاگ شخصی حامد شیرزاد
وبلاگ شخصی حامد شیرزاد
صفحات وبلاگ
نویسنده: حامد شیرزاد - ۱۳٩٠/٧/۱٢

با استفاده از تابع زیر می تونید تاریخ میلادی رو به تاریخ شمسی تبدیل کنید. این تابع تاریخ سیستم رو می گیره و معادل شمسی اون رو بر می گردونه . من یکسری تابع های دیگه دیدم که این کار رو انجام میدن ولی اکثرشون یه روزهایی اشتباه عمل می کردن ولی این تابع خیلی خیلی دقیقه و به هیچ عنوان اشتباه نمی کنه .

Function SHDate:String;

Const

D : Array [0..11] of integer=(20, 19, 20, 20, 21, 21, 22, 22, 22, 22, 21, 21);

P : Array [0..11] of integer=(11, 12, 10, 12, 11, 11, 10, 10, 10, 9, 10, 10);

Mon: Array [0..11]of String=('01','02','03','04','05','06','07','08','09','10','11','12');

Var DateLocal:_SYSTEMTIME;

Dm,Mm,Ym:Word;

P1,D1,I,U,Rp,Ys,Ms,Ds,X:Integer;

Sal,Mah,Roz:String;

begin

GetLocalTime(DateLocal);

Ym:=DateLocal.wYear;

Mm:=DateLocal.wMonth;

Dm:=DateLocal.wDay;

Dm := Dm;

U := 0;

Rp:= 0;

If (Ym Mod 4) = 0 Then U := 1;

If ((Ym Mod 100 = 0) AND (Ym Mod 400 <> 0)) Then U := 0;

Ys := Ym - 622;

X := Ys - 22;

X := X Mod 33;

If ((X Mod 4 = 0) AND (X <> 32)) Then Rp := 1;

I := Not(Rp-2) + NOT(U - 2) * 2;

X := 0;

If (I = 0) AND (Mm = 3) Then X := 1;

If I = 0 Then I := 3;

Ms := (9 + Mm) Mod 13;

If Ms < 10 Then Ms := Ms + 1;

D1 := D[Mm - 1];

If (I = 1) AND (Mm > 2) Then D1 := D1 - 1;

If (I = 2) AND (Mm < 3) then D1 := D1 - 1;

P1 := P[Mm - 1];

If (I = 1) AND (Mm > 2) Then P1 := P1 + 1;

If (I = 2) AND (Mm < 4) Then P1 := P1 + 1;

If (Dm > 0) AND (Dm <= D1) Then

Begin

Ds := P1 + Dm + X - 1;

X := 1;

End

Else

Begin

Ds := Dm - D1;

Ms := Ms + 1;

If Ms = 13 Then Ms := 1;

X := 2;

End;

If ((Mm = 3) AND (X = 2)) OR (Mm > 3) Then Ys := Ys + 1;

Sal:=IntToStr(Ys);

If Length(Sal)=1 then Insert('0',Sal,1);

Mah:=Mon[Ms-1];

Roz:=IntToStr(Ds);

If Length(Roz)=1 then Insert('0',Roz,1);

Result:=Sal+'/'+Mah+'/'+Roz;

Delete(Result,1,2);

end;

نویسندگان وبلاگ:
مطالب اخیر:
کدهای اضافی کاربر :