المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
بسم الله الله الرحمن الرحيم
يمكنك استعمال كل من
EncodeDate / DecodeDate / DateToStr / StrToDate
لتحصل على النتيجة التي تريد
والسلام عليكم ورحمة الله
المشاركات : 115
المواضيع 10
:
: 0
الإنتساب : Feb 2008
و عليكم السلام و رحمة الله
بالإضافة إلى الوظيفة 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
المشاركات : 115
المواضيع 10
:
: 0
الإنتساب : Feb 2008
و بدمج الوظيفة الثانية في الأولى نحصل على الوظيفة النهائية
كود :
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;
المشاركات : 115
المواضيع 10
:
: 0
الإنتساب : Feb 2008
أو الوظيفة التالية
كود :
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'
المشاركات : 334
المواضيع 83
:
: 17
الإنتساب : Feb 2008
السلام عليكم
حسنا يبدو أن أخونا مهدي قد وجد ضالته
فلماذا لا يقدم لنا في دروس للمبتدئين - درس عن التحويل من الميلادي إلى الهجري و العكس..
لإثراء المخزون المعرفي
و ايضا لما لا تحاول أن تضع تصورا و خوارزمية التحويل ربما في المستقبل ننشأ مكونا من مجهودنا الخاص
أيضا هي فكرة لما لا يكون لدينا برامج و مكونات من تجاربنا و دروسنا
تحياتي
المشاركات : 115
المواضيع 10
:
: 0
الإنتساب : Feb 2008
كود :
أيضا هي فكرة لما لا يكون لدينا برامج و مكونات من تجاربنا و دروسنا
فكرة جيدة و لي إضافة جديدة للكود
يمكن تغيير شكل التاريخ ابتداءا من الوظيفة GetDateFormat و هذه أمثلة
'dddd dd MMMM yyyy' = الاثنين 18 صفر 1429
'MMMM yyyy' = صفر 1429
'dddd' = الاثنين
'MMMM' = صفر
المشاركات : 334
المواضيع 83
:
: 17
الإنتساب : Feb 2008
02-03-2008, 05:59 AM
(آخر تعديل لهذه المشاركة: 02-03-2008, 06:03 AM بواسطة merouane.)
السلام عليكم
وجدت طريقة أخرى بالنسبة لعرض التاريخ على شكل '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;
النتيجة
تحياتي
المشاركات : 115
المواضيع 10
:
: 0
الإنتساب : Feb 2008
أحسنت
و لكن الكود يقوم بتحويل التاريخ الميلادي فقط فهل ممكن تجريب التاريخ الهجري ؟
و الإجراء GetLocaleFormatSettings غير موجود في الإصدارات الأقل من دلفي 7.
المشاركات : 1
المواضيع 0
:
: 0
الإنتساب : Dec 2008
السلام عليكم اشكر الاخ الفاضل الذي قام بهذا المجهود الجيد في هذه الاداة الاكثر من رائعة ولكني كمحلل نظم وجدت اخطأ كثيرة جدا بها وبالتالي تعتبر اداة بها نواقص تؤدي الي عدم الاعتماد عليها
1- لابد من تغيير نظام الوندوز الي هجري حتي تعمل دالة GregToHijri
2- في بعض الاشهر الخاصة بسنوات مختلفة نجد ان الدالة HijriToGreg تقوم باضافة يوم تلقائي فعلي سبيل المثال قم بتحويل يوم 13/5/1429 ستجد انه تم التحويل الي التاريخ الميلادي 19/5/2008 وعند تحويل التاريخ الميلادي الي هجري مرة اخري باستخدام دالة GregToHijri ستجد ان التاريخ الهجري الذي تم ادخالة من قبل زاد يوما واصبح 14/5/1429 وهذا بالطبع يعتبر مشكلة كبيرة لأن التاريخ دائما حقل مهم وفعال في البحث اثناء عمل قاعدة البيانات
انا ارجع ذلك لخطأ في الحسابات ولايمكن علاجة كما هو مقدم في الدالة
عذرا ولكن هناك الكثير من الاخطأ ولكنني احببت فقط ان اوضح اهم خطأين حتي ابين لمستخدم الاداة انها فعلا غير فعالة في البرامج التي تحتاج الكثير من الدقة :mad: :confused:
السلام عليكم ورحمة الله وبركاته
مساكم/صبحكم الله بالخير
انا استعمل دلفي 2009 وقاعدة بيانات sql 2005 وحاولت اركب الكمبوننت ولكن ما استطعت!!!!
ياريت احد الشباب يشرح كيفية تركيبه
شاكر مقدما