هل من امكانية في استعمال التأريخ الهجري ؟
#11
بسم الله الله الرحمن الرحيم
يمكنك استعمال كل من
EncodeDate / DecodeDate / DateToStr / StrToDate
لتحصل على النتيجة التي تريد
والسلام عليكم ورحمة الله
الرد
#12
و عليكم السلام و رحمة الله

بالإضافة إلى الوظيفة function الرائعة التي أعطانيها xinofix

كود :
ربما وجدت لك شيء مفيدا من منتدى الفريق العربي للبرمجة كود PHP: function GregToHijri(Date: TDateTime): String; var GregDate: TSystemTime; HigriText: array[0..127] of Char; {For Hijra date} begin DateTimeToSystemTime(Date, GregDate); GetDateFormat(0, DATE_USE_ALT_CALENDAR, @GregDate, 'dd/MM/yyyy', HigriText, 128); Result := StrPas(HigriText); end;

التي تعطيني تاريخ بشكل 1429-02-18

أضيف الوظيفة التالية

كود :
function StrHijriDate(MDate: TDate): string; var HDate, Day, Month, Year : String; begin HDate:=GregToHijri(MDate); Day:=Copy(HDate,1,2); Month:=Copy(HDate,4,2); Year:=Copy(HDate,7,4); Result := Year+'-'+Month+'-'+Day; end;

التي تجعل الأيام مكان السنوات و السنوات مكان الأيام بالشكل التالي 18-02-1429 الذي يسمح بالترتيب التاريخ المكتوبة في حقل string فلا أحتاج إلى DecodeDate لأن الوظيفة الأولى تعطيني تاريخا بشكل string
الرد
#13
و بدمج الوظيفة الثانية في الأولى نحصل على الوظيفة النهائية
كود :
function GregToHijri(Date: TDateTime): String; var GregDate: TSystemTime; HigriText: array[0..127] of Char; {For Hijra date} HDate : String; begin DateTimeToSystemTime(Date, GregDate); GetDateFormat(0, DATE_USE_ALT_CALENDAR, @GregDate, 'dd/MM/yyyy', HigriText, 128); HDate:= StrPas(HigriText); Result := Copy(HDate,7,4)+'-'+Copy(HDate,4,2)+'-'+Copy(HDate,1,2); end;
الرد
#14
أو الوظيفة التالية

كود :
function GregToHijri(Date: TDateTime): String; var GregDate: TSystemTime; HigriText: array[0..127] of Char; {For Hijra date} HDate : String; begin DateTimeToSystemTime(Date, GregDate); GetDateFormat(0, DATE_USE_ALT_CALENDAR, @GregDate, 'yyyy/MM/dd', HigriText, 128); Result := StrPas(HigriText); end;

و ذلك بتغيير شكل التاريخ من 'dd/MM/yyyy' إلى 'yyyy/MM/dd'
الرد
#15
السلام عليكم

حسنا يبدو أن أخونا مهدي قد وجد ضالته

فلماذا لا يقدم لنا في دروس للمبتدئين - درس عن التحويل من الميلادي إلى الهجري و العكس..

لإثراء المخزون المعرفي

و ايضا لما لا تحاول أن تضع تصورا و خوارزمية التحويل ربما في المستقبل ننشأ مكونا من مجهودنا الخاص

أيضا هي فكرة لما لا يكون لدينا برامج و مكونات من تجاربنا و دروسنا

تحياتي Smile
الرد
#16
كود :
أيضا هي فكرة لما لا يكون لدينا برامج و مكونات من تجاربنا و دروسنا

فكرة جيدة و لي إضافة جديدة للكود

يمكن تغيير شكل التاريخ ابتداءا من الوظيفة GetDateFormat و هذه أمثلة

'dddd dd MMMM yyyy' = الاثنين 18 صفر 1429

'MMMM yyyy' = صفر 1429

'dddd' = الاثنين

'MMMM' = صفر
الرد
#17
السلام عليكم

وجدت طريقة أخرى بالنسبة لعرض التاريخ على شكل 'yyyy/MM/dd'

وذلك باستعمال TFormatSettings ، وهنا تفصيلها من Delphi help

[SIZE="2"][INDENT][INDENT]
Unité[INDENT]SysUtils[/INDENT]

Syntaxe Delphi[INDENT]type[/INDENT]
[INDENT][INDENT]TFormatSettings =record[/INDENT][/INDENT][INDENT][INDENT][INDENT]CurrencyFormat : Byte;
NegCurrFormat : Byte;
ThousandSeparator : Char;
DecimalSeparator : Char;
CurrencyDecimals : Byte;
DateSeparator : Char;
TimeSeparator : Char;
ListSeparator : Char;
CurrencyString : string;
ShortDateFormat : string;
LongDateFormat : string;
TimeAMString : string;
TimePMString : string;
ShortTimeFormat : string;
LongTimeFormat : string;

ShortMonthNames : array[1..12] of string;
LongMonthNames : array[1..12] of string;
ShortDayNames : array[1..7] of string;
LongDayNames : array[1..7] of string;
TwoDigitYearCenturyWindow : Word [/INDENT][/INDENT][/INDENT]

[INDENT][INDENT]end;[/INDENT][/INDENT]
[/INDENT][/INDENT][/SIZE]

كود :
procedure TForm1.Button1Click(Sender: TObject); var MySettings: [color=Blue]TFormatSettings[/color]; s: string; d: TDateTime; begin GetLocaleFormatSettings(GetUserDefaultLCID, MySettings); // أولا لمعرفة المعلومات المحلية MySettings.DateSeparator := '-'; // القيام بما نريد MySettings.TimeSeparator := ':'; MySettings.ShortDateFormat := 'mm-dd-yyyy'; MySettings.ShortTimeFormat := 'hh:nn:ss'; s := DateTimeToStr(Now, MySettings); // استعمالها في عملية التحويل إلى نص ShowMessage(s); d := StrToDateTime(s, MySettings); ShowMessage(DateTimeToStr(d, MySettings)); end;

النتيجة

[صورة: 6059ae0.png]


تحياتي Smile
الرد
#18
أحسنت

و لكن الكود يقوم بتحويل التاريخ الميلادي فقط فهل ممكن تجريب التاريخ الهجري ؟

و الإجراء GetLocaleFormatSettings غير موجود في الإصدارات الأقل من دلفي 7.
الرد
#19
السلام عليكم اشكر الاخ الفاضل الذي قام بهذا المجهود الجيد في هذه الاداة الاكثر من رائعة ولكني كمحلل نظم وجدت اخطأ كثيرة جدا بها وبالتالي تعتبر اداة بها نواقص تؤدي الي عدم الاعتماد عليها

1- لابد من تغيير نظام الوندوز الي هجري حتي تعمل دالة GregToHijri
2- في بعض الاشهر الخاصة بسنوات مختلفة نجد ان الدالة HijriToGreg تقوم باضافة يوم تلقائي فعلي سبيل المثال قم بتحويل يوم 13/5/1429 ستجد انه تم التحويل الي التاريخ الميلادي 19/5/2008 وعند تحويل التاريخ الميلادي الي هجري مرة اخري باستخدام دالة GregToHijri ستجد ان التاريخ الهجري الذي تم ادخالة من قبل زاد يوما واصبح 14/5/1429 وهذا بالطبع يعتبر مشكلة كبيرة لأن التاريخ دائما حقل مهم وفعال في البحث اثناء عمل قاعدة البيانات
انا ارجع ذلك لخطأ في الحسابات ولايمكن علاجة كما هو مقدم في الدالة

عذرا ولكن هناك الكثير من الاخطأ ولكنني احببت فقط ان اوضح اهم خطأين حتي ابين لمستخدم الاداة انها فعلا غير فعالة في البرامج التي تحتاج الكثير من الدقة :mad: :confused:
الرد
#20
السلام عليكم ورحمة الله وبركاته

مساكم/صبحكم الله بالخير

انا استعمل دلفي 2009 وقاعدة بيانات sql 2005 وحاولت اركب الكمبوننت ولكن ما استطعت!!!!

ياريت احد الشباب يشرح كيفية تركيبه


شاكر مقدما
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم