كما نعرف أن قاعدة البيانات SQL server لا تقبل إدخال التاريخ بالهجري إذا كان الحقل
من نوع Datetime
فتحتاج في هذه الحالة إلى دالة للتحويل من التاريخ الهجري إلى الميلادي و العكس ..
الفئة Date.cs تحتوي على دوال عديدة لتحويل التاريخ من هجري إلى ميلادي و العكس بالإضافة إلى دوال مساعدة أخرى:
كود PHP:
using System;
using System.Web;
using System.Diagnostics;
using System.Globalization;
using System.Data;
using System.Collections;
namespace Bahsas
{
/// <summary>
/// Summary description for Dates.
/// </summary>
public class Dates
{
private HttpContext cur;
private const int startGreg=1900;
private const int endGreg=2100;
private string[] allFormats={"yyyy/MM/dd","yyyy/M/d",
"dd/MM/yyyy","d/M/yyyy",
"dd/M/yyyy","d/MM/yyyy","yyyy-MM-dd",
"yyyy-M-d","dd-MM-yyyy","d-M-yyyy",
"dd-M-yyyy","d-MM-yyyy","yyyy MM dd",
"yyyy M d","dd MM yyyy","d M yyyy",
"dd M yyyy","d MM yyyy"};
private CultureInfo arCul;
private CultureInfo enCul;
private HijriCalendar h;
private GregorianCalendar g;
public Dates()
{
cur = HttpContext.Current;
arCul=new CultureInfo("ar-SA");
enCul=new CultureInfo("en-US");
h=new HijriCalendar();
g=new GregorianCalendar(GregorianCalendarTypes.USEnglish);
arCul.DateTimeFormat.Calendar=h;
}
/// <summary>
/// Check if string is hijri date and then return true
///التحقق هل النص المدخل تاريخ هجري و إرجاع قيمة صحيحة
/// </summary>
/// <PARAM name="hijri"></PARAM>
/// <returns></returns>
public bool IsHijri(string hijri)
{
if (hijri.Length<=0)
{
cur.Trace.Warn("IsHijri Error: Date String is Empty");
return false;
}
try
{
DateTime tempDate=DateTime.ParseExact(hijri,allFormats,
arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
if (tempDate.Year>=startGreg && tempDate.Year<=endGreg)
return true;
else
return false;
}
catch (Exception ex)
{
cur.Trace.Warn("IsHijri Error :"+hijri.ToString()+"\n"+
ex.Message);
return false;
}
}
/// <summary>
/// Check if string is Gregorian date and then return true
///التحقق هل النص المدخل تاريخ ميلادي و إرجاع قيمة صحيحة
/// </summary>
/// <PARAM name="greg"></PARAM>
/// <returns></returns>
public bool IsGreg(string greg)
{
if (greg.Length<=0)
{
cur.Trace.Warn("IsGreg :Date String is Empty");
return false;
}
try
{
DateTime tempDate=DateTime.ParseExact(greg,allFormats,
enCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
if (tempDate.Year>=startGreg && tempDate.Year<=endGreg)
return true;
else
return false;
}
catch (Exception ex)
{
cur.Trace.Warn("IsGreg Error :"+greg.ToString()+"\n"+ex.Message);
return false;
}
}
/// <summary>
/// Return Today Gregorian date and return it in yyyy/MM/dd format
/// yyyy/MM/dd إرجاع تاريخ اليوم بالميلادي بشكل
/// </summary>
/// <returns></returns>
public string GDateNow()
{
try
{
return DateTime.Now.ToString("yyyy/MM/dd",enCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("GDateNow :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Return formatted today Gregorian date based on your format
/// ارجاع تاريخ اليوم بالميلادي بالِشكل الذي تحدده
/// </summary>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string GDateNow(string format)
{
try
{
return DateTime.Now.ToString(format,enCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("GDateNow :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Return Today Hijri date and return it in yyyy/MM/dd format
/// yyyy/MM/dd إرجاع تاريخ اليوم بالهجري بشكل
/// </summary>
/// <returns></returns>
public string HDateNow()
{
try
{
return DateTime.Now.ToString("yyyy/MM/dd",arCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("HDateNow :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Return formatted today hijri date based on your format
/// إرجاع تاريخ اليوم بالهجري بالِشكل الذي تحدده
/// </summary>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string HDateNow(string format)
{
try
{
return DateTime.Now.ToString(format,arCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("HDateNow :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Convert Hijri Date to it's equivalent Gregorian Date
///تحويل التاريخ الهجري إلى ما يكافئه بالتاريخ الميلادي
/// </summary>
/// <PARAM name="hijri"></PARAM>
/// <returns></returns>
public string HijriToGreg(string hijri)
{
if (hijri.Length<=0)
{
cur.Trace.Warn("HijriToGreg :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(hijri,allFormats,
arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString("yyyy/MM/dd",enCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("HijriToGreg :"+hijri.ToString()+"\n"+ex.Message);
return "";
}
}
/// <summary>
/// Convert Hijri Date to it's equivalent Gregorian Date
/// and return it in specified format
/// تحويل التاريخ الهجري إلى ما يكافئه بالتاريخ الميلادي
///و إعادته بشكل محدد
/// </summary>
/// <PARAM name="hijri"></PARAM>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string HijriToGreg(string hijri,string format)
{
if (hijri.Length<=0)
{
cur.Trace.Warn("HijriToGreg :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(hijri,
allFormats,arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString(format,enCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("HijriToGreg :"+hijri.ToString()+"\n"+ex.Message);
return "";
}
}
/// <summary>
/// Convert Gregoian Date to it's equivalent Hijir Date
/// تحويل التاريخ الميلادي إلى ما يكافئه بالتاريخ الهجري
/// </summary>
/// <PARAM name="greg"></PARAM>
/// <returns></returns>
public string GregToHijri(string greg)
{
if (greg.Length<=0)
{
cur.Trace.Warn("GregToHijri :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(greg,allFormats,
enCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString("yyyy/MM/dd",arCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("GregToHijri :"+greg.ToString()+"\n"+ex.Message);
return "";
}
}
/// <summary>
/// Convert Hijri Date to it's equivalent Gregorian Date and
/// return it in specified format
/// تحويل التاريخ الهجري إلى ما يكافئه بالتاريخ الميلادي
///و اعادته بشكل محدد
/// </summary>
/// <PARAM name="greg"></PARAM>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string GregToHijri(string greg,string format)
{
if (greg.Length<=0)
{
cur.Trace.Warn("GregToHijri :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(greg,allFormats,
enCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString(format,arCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("GregToHijri :"+greg.ToString()+"\n"+ex.Message);
return "";
}
}
/// <summary>
/// Compare two instaces of string date
/// and return indication of thier values
///مقارنة بين تاريخين (سلسة حرفية)
/// </summary>
/// <PARAM name="d1"></PARAM>
/// <PARAM name="d2"></PARAM>
/// <returns>positive d1 is greater than d2,
/// negative d1 is smaller than d2, 0 both are equal</returns>
///إرجاع قيمة موجبة إذا كانت القيمة الأولى أكبر من القيمة الثانية ،
/// إرجاع قيمة صفر إذا كانت القيمتان متكافئتان ، إرجاع قيمة سالبة إذا
/// كانت القيمة الأولى أصغر من القيمة الثانية
public int Compare(string d1,string d2)
{
try
{
DateTime date1=DateTime.ParseExact(d1,allFormats,
arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
DateTime date2=DateTime.ParseExact(d2,allFormats,
arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return DateTime.Compare(date1,date2);
}
catch (Exception ex)
{
cur.Trace.Warn("Compare :"+"\n"+ex.Message);
return -1;
}
}
}
}
فقط كل ما تحتاجه هو استدعاء دوال التحويل السابقة كما يلي:
لنفرض أن لدينا قاعدة البيانات التالية (مثال)
تحتوي عل حقلين ID,date_
نقوم بإدراج الفئة Date في مجلد app_Code إذا لم يكن موجود قم بإدراجه من خلال الضغط بالزر الأيمن على الـ Solutionو قم باختيار
Add New Asp.Net Folder و اختار من القائمة app_code
نقوم بإضافة الفئة إلى المجلد بالضغط على الزر الأيمن و اختيار Add Existing item و نحتار الفئة Date.cs
الآن نقوم باستدعاء الدالة في صفحة التي نريد تحويل التاريخ فيها بطريقتين :
1- في الـ code- behind في صفحة الـ dafualt.aspx.cs هذه هي الطريقة السهلة و المعتادة في البرمجة في التعامل مع Object:
تقوم بتعريف متغير من النوع Date
كود PHP:
Dates mydate = new Dates();
بعد ذلك نقوم باستدعاء الدالة كما يلي:
lblDate.Text = mydate.GregToHijri(string.Format("{0:d}", date_ ));
lblDate.Text
يمثل حقل مربع نص موجود في صفحة الـ Asp و المراد اسناد قيمة التاريخ (بعد التحويل من الميلادي إلى الهجري)إليه
2- استدعاء الدالة من خلال صفحة الـ dafualt.aspx مباشرة ذلك عندما يتم اسناد القيم في صفحة الـ dafualt.aspx من خلال الـ
SQLdatesource أو الـ Objectdatesource و ذلك عندما يتم التعامل مع الـ GridView ,DetailsView...
يتم تعريف دالة باسم (GetHijriDate) تأخذ قيمة من نوع DateTime و في داخل هذه الدالة نقوم باستدعاء دالة من الفئة Date
كود
protected string GetHijriDate(DateTime hijriDate)
{
Dates a = new Dates();
return a.GregToHijri(string.Format("{0:d}", hijriDate));
}
بعد ذلك في صفحة الـ aspx الخاصة بك قم بكتابة التالي:
HTML كود
<asp:Literal runat="server" ID="lblAddedDate" Text='<%#GetHijriDate((DateTime)DataBinder.Eval(Co ntainer. DataItem,"date_")) %>' />
كما يمكن استخدام الدالة GregToHijriبالشكل التالي:
كود
a.GregToHijri(string.Format("{0:d}", hijriDate),"yyyy/MM/dd");
لتحديد شكل التاريخ المطلوب
نلاحظ الجملة التالية:
كود
string.Format("{0:d}", hijriDate)
ماذا يعني الرمز d :
String Format for DateTime
هناك عدة رموز لها دلالات معينة نوضحها كالتالي :
كود PHP:
t ShortTimePattern h:mm tt
d ShortDatePattern M/d/yyyy
T LongTimePattern h:mm:ss tt
D LongDatePattern dddd, MMMM dd, yyyy
f (combination of D and t) dddd, MMMM dd, yyyy h:mm tt
F FullDateTimePattern dddd, MMMM dd, yyyy h:mm:ss tt
g (combination of d and t) M/d/yyyy h:mm tt
G (combination of d and T) M/d/yyyy h:mm:ss tt
m, M MonthDayPattern MMMM dd
y, Y YearMonthPattern MMMM, yyyy
r, R RFC1123Pattern ddd, dd MMM yyyy HH':'mm':'ss
s SortableDateTi¬mePattern yyyy'-'MM'-'dd'T'HH':'mm':'ss
u UniversalSorta¬bleDateTimePat¬tern yyyy'-'MM'-'dd HH':'mm':'ss'Z'
الأمثلة التالية توضح كيفية استخدام الرموز السابقة:
لنفرض ان لدينا متغير من نوع datetime باسم dt
يحمل القيمة التالية ( 2008-03-09 16:05:07.123 )
DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);
كود PHP:
[C#]
String.Format("{0:t}", dt); // "4:05 PM" ShortTime
String.Format("{0:d}", dt); // "3/9/2008" ShortDate
String.Format("{0:T}", dt); // "4:05:07 PM" LongTime
String.Format("{0:D}", dt); // "Sunday, March 09, 2008" LongDate
String.Format("{0:f}", dt); // "Sunday, March 09, 2008 4:05 PM" LongDate+ShortTime
String.Format("{0:F}", dt); // "Sunday, March 09, 2008 4:05:07 PM" FullDateTime
String.Format("{0:g}", dt); // "3/9/2008 4:05 PM" ShortDate+ShortTime
String.Format("{0:G}", dt); // "3/9/2008 4:05:07 PM" ShortDate+LongTime
String.Format("{0:m}", dt); // "March 09" MonthDay
String.Format("{0:y}", dt); // "March, 2008" YearMonth
String.Format("{0:r}", dt); // "Sun, 09 Mar 2008 16:05:07 GMT" RFC1123
String.Format("{0:s}", dt); // "2008-03-09T16:05:07" SortableDateTime
String.Format("{0:u}", dt); // "2008-03-09 16:05:07Z" UniversalSortableDateTime
وهناك أيضاً رموز أخرى تستخدم مع الـ String.Format :
كود
y (year) السنة
M (month) الشهر
d (day) اليوم
h (hour 12) الساعة بنظام 12 ساعة
H (hour 24) الساعة بنظام 24 ساعة
m (minute) الدقائق
s (second) الثواني
f (second fraction) جزء من الثانية
t (P.M or A.M)
الأمثلة التالية بسي # توضح كيفية استخدام الاختصارات السابقة
كود
[C#]
String.Format("{0:y yy yyy yyyy}", dt); // "8 08 008 2008" year
String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month
String.Format("{0:d dd ddd dddd}", dt); // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}", dt); // "4 04 16 16" hour 12/24
String.Format("{0:m mm}", dt); // "5 05" minute
String.Format("{0:s ss}", dt); // "7 07" second
String.Format("{0:f ff fff ffff}", dt); // "1 12 123 1230" sec.fraction
String.Format("{0:F FF FFF FFFF}", dt); // "1 12 123 123" without zeroes
String.Format("{0:t tt}", dt); // "P PM" A.M. or P.M.
String.Format("{0:z zz zzz}", dt); // "-6 -06 -06:00" time zone
يمكنك أيضا استخدام (/)في التاريخ ، و( : ) في الوقت كما في المثال التالي:
كود
[C#]
String.Format("{0:d/M/yyyy HH:mm:ss}", dt); // "9/3/2008 16:05:07" - english (en-US)
بعض الصيغ الخاصة:
كود
[C#]
// الشهر/اليوم بدون صفر أو بصفر
String.Format("{0:M/d/yyyy}", dt); // "3/9/2008"
String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008"
// اسم الشهر و اليوم
String.Format("{0:ddd, MMM d, yyyy}", dt); // "Sun, Mar 9, 2008"
String.Format("{0:dddd, MMMM d, yyyy}", dt); // "Sunday, March 9, 2008"
// السنة أربع خانتين /اربع خانات
String.Format("{0:MM/dd/yy}", dt); // "03/09/08"
String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008"