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

مشكلة التاريخ الهجري في server2008

بدأه ضاري في 1 فبراير 2010 · 5 رد · 745 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اخواني اتمنى مساعدتي بخصوص هذه المشكله

وقمت بالبحث عن الحل بالمنتدى ولم اجد شخص تطرق لهذا الموضوع

وهو اني استخدم اداة Calendar في برنامجي ومعتمد عليها بشكل اساسي ويعمل البرنامج على جهازي والتاريخ يكون بالهجري

لكن بعد ما رفعته على سيرفر 2008 اصبح الاداة تاخذ التاريخ بالميلادي

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

هل من احد لديه الحل او مرت عليه هذي المشكلة

#2

االأخ الكريم / ضاري

السلام عليكم ورحمة الله وبركاته، أنا أنصحك لوجه الله أن لا تقوم بتخزين التواريخ في قاعدة البيانات بالهجرية وذلك لعدة أسباب قبل أن تعرف أبسط سبب يجب عليك معرفية التكتيك التالي: في الـ .NET يتم عرض التواريخ والعملات وما إلى ذلك بالإعتماد على شيء يسمى CultureInfo، حيث انه يختلف على حسب ما يسمى بالـ CultureID وهو عبارة عن رقم int أو بالـ CultureName وهو عبارة عن string، المشكلة هي أنه في حالة عدم تحديد الـ Culture لتطبيقك سيكون الـ Culture بشكل إفتراضي هو "en-US" وهو يعتمد على التاريخ الإغريقي، يمكنك تغيير الـ Culture الحالي إلى مثلا "ar-SA" وهو يستخدم التاريخ الهجري (أيضا يمكنك تعريف Culture خاص بك ولكن هذا خارج نطاق موضوعنا) كما هو موضح في الكود التالي :

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ar-SA");

المشكلة تكمن في التالي: قم بعرض التاريخ 1431/1/1 كما هو موضح أدناه :

DateTime hDate = new DateTime(1431, 1, 1);
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ar-SA");

                Console.WriteLine(hDate.ToString("dd/MM/yyyy"));

لاحظ أن السنه هنا عبارة 834 هـ !!!

لذلك قم بتخزين التاريخ في قاعدة بياناتك بالتاريخ الإغريقي ولكن قم بعرضه بعد التأكد من تغيير الـ System.Threading.Thread.CurrentThread.CurrentCulture إلى الـ Culture الذي تريد في حدث PageInit كما هو موضح في الكود التالي :

protected override void OnInit(EventArgs e)
    {
        System.Threading.Thread.CurrentThread.CurrentCulture = 
            new System.Globalization.CultureInfo("your culture");
    }

ولمعرفة كل الـ Culture الموجودة في نسخة الـ .NET التي تمتلكها قم بإنشاء مشروع جديد من نوع Console وأضف الكود التالي :

foreach (System.Globalization.CultureInfo ci in
                    System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures))
                {
                    Console.WriteLine("Culture ID: {0}, Culture Name: {1}", ci.LCID, ci.Name);
                }

أتمنى لك التوفيق

1
#3

صراحه لم افهم شي

ياليت تبسط الامر وجزاك الله الف خير

#4

طيب هل استطيع ان اجعل برنامجي ياخذ التاريخ حسب جهاز المستخدم وليس حسب السيرفر ؟

#5

هذه صورة الخطأ

ارجو المساعدة ياجماعة

post-85073-12651940143105_thumb.jpg

post-85073-12651940362633_thumb.jpg

#6

أخي الكريم ... بالنسبة لي أنا كنت أتلافى مثل هذه المشاكل بفكرة بسيطة للغاية ... وهي أن أخزن التواريخ الهجرية في خانات اسمية ... يعني اجعل عمود التاريخ في الجدول بقاعدة البيانات من أنواع NVarChar ... وفي الكود عند إرسال البيانات أو استقبالها أقوم بالتحويل من DateTime إلى string والعكس بالعكس ... جرب هذه الفكرة وأعلمني بالنتيجة ... تحياتي

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

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