الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن تحويل التاريخ

مغلق
بدأه fadi2003 في 13 أغسطس 2003 · 10 رد · 1,415 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

هل يمكن إرشادي إلى كود يقوم بتحويل التاريخ من هجري إلى ميلادي

ملاحظة : أحتاج إلى كود و ليس إلى كومبون ( مكتبة )

وشكرا جزيلا لكم (f)(f)

#2

السلام عليكم

هذا كود كتبته أيام زمان بالباسكال .. قد يكون مفيدا ، وتحتاج تحويل الإجراء إلى دالة والإعلان عن المتغيرات DD,MM,YY :

  {Range ..

  Greg. 30/04/1900..28/02/2100

  Hejri 01/01/1318..19/12/1523}



  {------------------------------------------}

  Function GMDays(M:Byte):Integer;

  Const Gms=30.6;

  Begin

    M := M Mod 12;

    If M>2 Then

      GMDays := Round((M-2)*Gms)+60

    Else

      GMDays := Round(M*Gms)-Trunc(M/2);

  End;

  {------------------------------------------}

  Procedure HtoG(D,M:Byte; Y:Integer; Var DD,MM:Byte; Var YY:Integer);

  Const Hys=354.3667; Gys=365.25;

  Var   DM:Integer; DY,Days:LongInt; Cut:Byte;

  Begin

    DY := Round((Y-1291) * Hys);

    DM := Round((M-1) * 29.51);

    Days := DY+DM+D-9814;



    YY := Int(Days/Gys);

    If Int(YY*Gys) > Days-1 Then YY := YY-1;

    Days := Days-Int(YY*Gys);

    YY := YY+1901;

    Cut := 0; If (Days>59) And (YY Mod 4<>0) Then Cut := 1;

    MM := Int((Days+Cut-1)/30); If MM>11 Then MM := 11;

    If GMDays(MM)-Cut > (Days-1) Then MM := MM-1;

    DD := Days-(GMDays(MM)-Cut); MM := MM+1;

  End;

  {------------------------------------------}

تحياتي .

#3

شكرا جزيلا لك أخي أبو هادي (f)(f)

#4

وانا احتاج الي تحويل التاريخ الميلادي الي هجري:D

#5

السلام عليكم

  {------------------------------------------}

  Function Int(Num:Real):LongInt;

  Begin

    If Num<0 Then Num := Num-1; Int := Trunc(Num);

  End;

  {------------------------------------------}

  Procedure GtoH(D,M:Byte; Y:Integer; Var DD,MM:Byte; Var YY:Integer; Var WD:Byte);

  Const Hys=354.3667; Gys=365.25;

  Var   DM:Integer; DY,Days:LongInt;

  Begin

    DY := Int((Y-1901)*Gys);

    DM := GMDays(M-1); If (M>2) And (Y Mod 4<>0) Then DM := DM-1;

    Days := DY+DM+D+9814;



    If (Days>82557) Or (Days<9569) Then Exit;

    WD := (Days+2) Mod 7;



    YY := Int(Days/Hys);

    If Round(YY*Hys) > Days-1 Then YY := YY-1;

    Days := Days-Round(YY*Hys);

    YY := YY+1291;

    MM := Int((Days-1)/29.5); If MM>11 Then MM := 11;

    If Round(MM*29.51) > (Days-1) Then MM := MM-1;

    DD := Days-Round(MM*29.51); MM := MM+1;

  End;

  {------------------------------------------}

تحياتي .

#6

السلام عليكم

وهذا كود للتحقق من صحة الإدخال Validation .

Var

  D ,M :Byte; Y :Integer; WD:Byte;

  DD,MM:Byte; YY:Integer;

  D2,M2:Byte; Y2:Integer;

  {------------------------------------------}

  Procedure Beep;

  Begin

    Sound(1000); Delay(300); NoSound;

  End;

  {------------------------------------------}



Begin

  ClrScr;

  While True Do Begin

    ReStart;

    If(M<0) Or (M>12) Then Begin Beep; Continue End;



   If (Y>=1318) And (Y<=1523) Then Begin

     HtoG(D ,M ,Y ,DD,MM,YY   );

     GtoH(DD,MM,YY,D2,M2,Y2,WD);

     If (D<>D2) Or (M<>M2) Or (Y<>Y2) Then

       Begin Beep; Continue End;

     PrintDate(DD,MM,YY,D,M,Y,WD); Continue

   End;



   If (Y>=1900) And (Y<=2100) Then Begin

     GtoH(D ,M ,Y ,DD,MM,YY,WD);

     HtoG(DD,MM,YY,D2,M2,Y2   );

     If (D<>D2) Or (M<>M2) Or (Y<>Y2) Then

       Begin Beep; Continue End;

     PrintDate(D,M,Y,DD,MM,YY,WD); Continue

   End;



   Beep; Continue

  End;

End.

تحياتي .

#7

شكرا جزيلا لك أخي أبو هادي ولكن بالنسبة لتحويل التاريخ من هجري لميلادي أين يجب أن أعلن عن المتغيرات وماهي نوع هذه المتغيرات

#8

السلام عليكم

أخي لقد حولت الإجراء إلى دالة نصية ، مع ملاحظة أن هناك 3 دوال أخرى مطلوبة في دالة التحويل .

  Function myStr(V:Real):String;

  Var N_:String; Len,Code:Integer; K:Byte;

  Begin

    Str(V:0:12,N_);

    While Copy(N_,Length(N_),1) ='0' Do Delete(N_,Length(N_),1);

    If Copy(N_,Length(N_),1) = '.' Then Delete(N_,Length(N_),1);

    myStr := N_;

  End;

  {------------------------------------------}

  Function Int(Num:Real):LongInt;

  Begin

    If Num<0 Then Num := Num-1; Int := Trunc(Num);

  End;

  {------------------------------------------}

  Function GMDays(M:Byte):Integer;

  Const Gms=30.6;

  Begin

    M := M Mod 12;

    If M>2 Then

      GMDays := Round((M-2)*Gms)+60

    Else

      GMDays := Round(M*Gms)-Trunc(M/2);

  End;

  {------------------------------------------}

  Function HtoG(D,M:Byte; Y:Integer):String;

  Const Hys=354.3667; Gys=365.25;

  Var   DM:Integer; DY,Days:LongInt; Cut:Byte;

        DD,MM:Byte; YY:Integer;

  Begin

    DY := Round((Y-1291) * Hys);

    DM := Round((M-1) * 29.51);

    Days := DY+DM+D-9814;



    YY := Int(Days/Gys);

    If Int(YY*Gys) > Days-1 Then YY := YY-1;

    Days := Days-Int(YY*Gys);

    YY := YY+1901;

    Cut := 0; If (Days>59) And (YY Mod 4<>0) Then Cut := 1;

    MM := Int((Days+Cut-1)/30); If MM>11 Then MM := 11;

    If GMDays(MM)-Cut > (Days-1) Then MM := MM-1;

    DD := Days-(GMDays(MM)-Cut); MM := MM+1;

    HtoG := myStr(DD)+'/'+myStr(MM)+'/'+myStr(YY);

  End;

  {------------------------------------------}

تحياتي .

#9

السلام عليكم ورحمة الله وبركاته

الله يعطيك العافية أخي أبو هادي

أخوكم الأقصى

#10

الله يعطيكم العافية يا شباب

ما قصرتوا

لكن لتتم الفائدة ، هل لدى أحدكم معادلات مواقيت الصلاة أيضاً؟

مع الشكر

#11

السلام عليكم

هذا كود آخر للتحويل من الميلادي إلى الهجري بلغة البيسك سهل يمكن تحويله للباسكال وهو من كتابة أحد الأخوة في منتدى PHP ، وليس لي منه إلا التحويل فقط ، على الرابط التالي :

http://www.arabteam2000.com/ib/index.php?s...view=getnewpost

تحياتي .

هذا الموضوع مغلق.

مواضيع مشابهة