PDA

View Full Version : مبتدی: مشکل در نمایش تاریخ شمسی در دیتاگریدویو در روزهای 30 و 31 اردیبهشت و 31 تیر و شهریور!



asbabi
دوشنبه 15 تیر 1394, 10:38 صبح
سلام
اولا که بنده اولین باره تایپیک ارسال می کنم و یه مقدار هم دنبال اینکه چجوری باید ارسال کنم گشتم! بنابراین بنده را به تایپیک های دیگه راهنمایی نفرمایین خواهشا:ناراحت:
مشکل بنده اینه:!
یه مثلا به اصطلاح برنامه نوشتم و تو دیتابیسش که sql هست چندتا جدول داره که دارای فیلد تاریخ هستند که تاریخها بصورت میلادی ذخیره میشوند.
روال برنامه هم اینه که تاریخها را از تکست باکس به صورت شمسی از کاربر می گیره و سپس با استفاده از system.globalization.persiancalender به میلادی تبدیل می کنه و در پایگاه داده ذخیره می کنه.
الحمدلله فعلا مشکلی تو این زمینه نیست.
مشکل زمانی هست که می خوام همین تاریخها را در دیتاگریدویو به کاربر نمایش بدهم یعنی تاریخی که به صورت میلادی در پایگاه ذخیره شده را خونده و به شمسی تغییر داده و در یکی از سلولهای دیتاگریدویو نشون بده.
این کار انجام میشه ولی وقتی میخاد تبدیل تاریخ از میلادی به شمسی انجام بشه در روزهای 30و31 اردیبهشت و روز 31 تیر و شهریور همه سالها مشکل پیدا می کنه. لطفا راهنمایی کنید. تو بقیه سایتها جستجو کردم یکی گفته بود سال و ماه و روز را جدا ذخیره کن. یکی گفته بود شمسی ذخیره کن. یکی گفته بود بهترین کار اینه که مثلا بصورت 940231 و از نوع integer ذخیره کنی در پایگاه داده (که بسیاری از شرکتهای بزرگ برنامه نویسی از همین روش استفاده می کنند و تمام تاریخها را از نوع integer تعریف می کنند و در پایگاه ذخیره می کنند!).
خلاصه بنده فعلا وقت و بخصوص سواااااات لازم برا تغییر تاریخ بصورتهای گفته شده را ندارم لطفا یکی بگه همین مشکل فعلی را برا همین 4 روز چطور حل کنم. ممنون

کلاس و توابع تبادیل! تاریخ اینجوریه:



class shamsi_miladi
{
public static DateTime shamsiTOmiladi(string Tarikh)
{

int Rooz = int.Parse(Tarikh.Substring(8, 2));
int Maah = int.Parse(Tarikh.Substring(5, 2));
int Saal = int.Parse(Tarikh.Substring(0, 4));
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime stm = new DateTime();
stm = pc.ToDateTime(Saal, Maah, Rooz, 0, 0, 0, 0);
return stm;
}

public static string miladiTOshamsi(DateTime tarikh)
{
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
string mts;
// mts=pc.GetYear(tarikh).ToString() + "/" + pc.GetMonth(tarikh).ToString() + "/" + pc.GetDayOfMonth(tarikh).ToString();
mts = string.Format("{0}/{1}/{2}", pc.GetYear(tarikh), pc.GetMonth(tarikh), pc.GetDayOfMonth(tarikh));
return mts;
}

}
و تابع تبدیل سطر به سطر، سلول حاوی تاریخ از میلادی به شمسی اینجوریه:




void showDGV_Aza(string select)
{
DataTable dt_Aza = new DataTable();
dt_Aza = Database.Query_select(select);
DGV_Aza.DataSource = dt_Aza;

for (int i = 0; i < DGV_Aza.RowCount; i++)
{
DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value =
DateTime.Parse(shamsi_miladi.miladiTOshamsi(DateTi me.Parse(DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value.ToString()))).ToShortDateString();
}
DGV_Aza.Show();
}

تابع database.query_select(select رکوردهای ذخیره شده را میخونه و در دیتاتیبل dt_Aza قرار میده. بعد تو یک حلقه for تاریخ میلادی خونده شده از پایگاه داده را بواسطه دستور سطر زیرش خونده و به شمسی تبدیل می کنه و در دیتاتیبل بجای تاریخ میلادی درج می کنه و در آخر دیتاتیبل در دیتاگریدویو نمایش داده میشه.
دقیقا در روزهای نامبرده شده عبارت



DateTime.Parse(DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value.ToString())
را خطا میگیره و با این عنوان when converting a string to datetime, parse the string to take a date befor putting each variable into the datetime object---make sure your method arguments are in the right format

ببخشید اینقدر توضیح دادم ولی گفتم توضیح واضحات داده باشم!!!:متعجب:

_4rm4n_
دوشنبه 15 تیر 1394, 11:02 صبح
سلام

چرا اصرار دارید که میلادی ثبت کنید ؟! شمسی کاربر ثبت میکنه بعد شما میلادیش میکنی بعد دوباره برای نمایشش شمسی ؟!!
خب با تابع زیر راحت تاریخ میلادی تبدیل به شمسی میشه ! :

public static string DATE()
{
PersianCalendar p = new PersianCalendar();
DateTime dmiladi = new DateTime();
dmiladi = DateTime.Now;
return p.GetYear(dmiladi).ToString() + "/" + p.GetMonth(dmiladi).ToString() + "/" + p.GetDayOfMonth(dmiladi).ToString();
}


فقط به جای DateTime.Now() میتونی تاریختو بزاری !
اینجوری :

dmiladi = Convert.ToDateTime("1999/9/11");

davidrobert
دوشنبه 15 تیر 1394, 15:49 عصر
من مشکل شما رو داشتم ولی این مشکل رو به این صورت رفع کردم تو سلول دیتاگرید ویو امدم شمسی رو دادم تریخ انقضا، ولی نوع فیلد در دیتابیس nvarchar قرار دادم برای شمسی ولی برای میلادی date در دیتابیس حالا کاری که کردم این هستش. تاریخ میلادی رو وارد میکنم.در سلول دیتاگرید ویو و در قسمت private void dgv1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
try
{
string shamsi = dgv1.CurrentRow.Cells["ClmDateAngezaShamsi"].Value.ToString();
string year = shamsi.Substring(0, 4);
string manth = shamsi.Substring(shamsi.Length - 5, 2);
string day = shamsi.Substring(shamsi.Length - 2, 2);
dgv1.CurrentRow.Cells["ClmDateAngezaMeladi"].Value = ClsNeedCode.Miladi(year, manth, day);
}
catch
{
}
}

این کد نوشتم گفتم تاریخ شمسی رو بگیر و به میلادی تبدیل کن و در ماه دوم تا 31 و چهارم هم تا 31 میگیره و معادل میلادی شو تبدیل میکنه و میریزه تو سلول دیگه دیتاگرید ویو و شما هم میلادی و هم شمسی رو با هم ذخیره میکنید و با میلادی نشان میدید ولی مخفی یانه با میلادی مقایسه میکنید.

asbabi
سه شنبه 16 تیر 1394, 09:25 صبح
سلام

چرا اصرار دارید که میلادی ثبت کنید ؟! شمسی کاربر ثبت میکنه بعد شما میلادیش میکنی بعد دوباره برای نمایشش شمسی ؟!!
خب با تابع زیر راحت تاریخ میلادی تبدیل به شمسی میشه ! :

public static string DATE()
{
PersianCalendar p = new PersianCalendar();
DateTime dmiladi = new DateTime();
dmiladi = DateTime.Now;
return p.GetYear(dmiladi).ToString() + "/" + p.GetMonth(dmiladi).ToString() + "/" + p.GetDayOfMonth(dmiladi).ToString();
}


فقط به جای DateTime.Now() میتونی تاریختو بزاری !
اینجوری :

dmiladi = Convert.ToDateTime("1999/9/11");


سلام
اصرار دارم میلادی ثبت بشه چون بعدش میخواهم تو کوئری نوشتن از تاریخ استفاده کنم و برا اینکه مشکلی در اس کیو ال پیدا نشه تاریخ میلادی باشه.
کدی که زحمت کشیدین نوشتین مشکل بنده رو حل نمیکنه! اگر به کدهای ارسالی بنده بیشتر دقت می کردین میدیدین که خودم از مشابه همین کدها استفاده کردم وجواب هم گرفتم. ولی در تبدیل تاریخ میلادی به شمسی و نشون دادنش تو یه سلول دیتاگریدویو به کاربر تو تاریخهای 20و21 ماه می(may) تمام سالهای میلادی که معادل 30و31 شهریور تمام سالهای شمسی میشه دچار مشکل میشم و همینطور 2015/07/22 و 2015/09/22 معادل 1394/04/31 و 1394/06/31.

asbabi
سه شنبه 16 تیر 1394, 09:54 صبح
من مشکل شما رو داشتم ولی این مشکل رو به این صورت رفع کردم تو سلول دیتاگرید ویو امدم شمسی رو دادم تریخ انقضا، ولی نوع فیلد در دیتابیس nvarchar قرار دادم برای شمسی ولی برای میلادی date در دیتابیس حالا کاری که کردم این هستش. تاریخ میلادی رو وارد میکنم.در سلول دیتاگرید ویو و در قسمت private void dgv1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
try
{
string shamsi = dgv1.CurrentRow.Cells["ClmDateAngezaShamsi"].Value.ToString();
string year = shamsi.Substring(0, 4);
string manth = shamsi.Substring(shamsi.Length - 5, 2);
string day = shamsi.Substring(shamsi.Length - 2, 2);
dgv1.CurrentRow.Cells["ClmDateAngezaMeladi"].Value = ClsNeedCode.Miladi(year, manth, day);
}
catch
{
}
}

این کد نوشتم گفتم تاریخ شمسی رو بگیر و به میلادی تبدیل کن و در ماه دوم تا 31 و چهارم هم تا 31 میگیره و معادل میلادی شو تبدیل میکنه و میریزه تو سلول دیگه دیتاگرید ویو و شما هم میلادی و هم شمسی رو با هم ذخیره میکنید و با میلادی نشان میدید ولی مخفی یانه با میلادی مقایسه میکنید.


من مشکل شما رو داشتم ولی این مشکل رو به این صورت رفع کردم تو سلول دیتاگرید ویو امدم شمسی رو دادم تریخ انقضا، ولی نوع فیلد در دیتابیس nvarchar قرار دادم برای شمسی ولی برای میلادی date در دیتابیس حالا کاری که کردم این هستش. تاریخ میلادی رو وارد میکنم.در سلول دیتاگرید ویو و در قسمت private void dgv1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
try
{
string shamsi = dgv1.CurrentRow.Cells["ClmDateAngezaShamsi"].Value.ToString();
string year = shamsi.Substring(0, 4);
string manth = shamsi.Substring(shamsi.Length - 5, 2);
string day = shamsi.Substring(shamsi.Length - 2, 2);
dgv1.CurrentRow.Cells["ClmDateAngezaMeladi"].Value = ClsNeedCode.Miladi(year, manth, day);
}
catch
{
}
}

این کد نوشتم گفتم تاریخ شمسی رو بگیر و به میلادی تبدیل کن و در ماه دوم تا 31 و چهارم هم تا 31 میگیره و معادل میلادی شو تبدیل میکنه و میریزه تو سلول دیگه دیتاگرید ویو و شما هم میلادی و هم شمسی رو با هم ذخیره میکنید و با میلادی نشان میدید ولی مخفی یانه با میلادی مقایسه میکنید.

سلام
ممنون از جوابتون.
بنده سعی کردم توضیح واضحات بدم ولی مثل اینکه خوب توضیح ندادم.
ببینید بنده تاریخ شمسی رو تو یه تکست باکس از کابر می گیرم و با یه تابع (shamsiTOmiladi) که کدشو قرار دادم به میلادی تبدیل می کنم و بعد با یه کوئری insert در پایگاه داده درج می کنم و هیچ مشکلی هم ندارم حتی برای تاریخهای 30و31 اردیبهشت و 31 تیر و شهریور هم مشکلی نیست و عادل میلادی اونها در پایگاه داده ذخیره میشه.
بعد میخوام این تاریخهایی که بصورت میلادی در پایگاه ذخیره شده را در یک سلول دیتاگرید ویو به کاربر نشون بدم(فرض کنید در یک تکست باکس به جای سلول دیتاگرید ویو قراره به کاربر نمایش داده بشه).
تاریخ میلادی را با یک کوئری select از پایگاه داده می خونم و بعد با یه تابع (miladiTOshamdsi) که کدشو قرار دادم به شمسی تبدیل میکنم و به کاربر نشون میدم. تا اینجا هم مشکلی نیست فقط وقتی تو نمایش میرسه به تبدیل تاریخهای میلادی (2015/05/20 و 2015/05/21 و 2015/07/22 و 20515/09/22) و اونها رو به معادل شمسی تبدیل می کنه یعنی (1394/02/30 و 1394/02/31 و 1394/04/31 و 1394/06/31) و میخاد اونها را به کاربر نشون بده تو قسمت تبدیل این تاریخها از نوع string به نوع datetime خطا میده.
توجه بفرمائید که تابع miladiTOshamdsi تاریخ شمسی را بصورت رشته برمیگردونه و بنده فکر کنم!!! مجبورم اونو به نوع datetime تبدیل کنم.
ولی تابع parse از کلاس datetime در تبدیل رشته به تاریخ در همون تاریخهایی که عرض کردم خطا میگیره.
کاش کسی متوجه شده باشه چی گفتم.:گیج:

Mahmoud Zaad
سه شنبه 16 تیر 1394, 09:56 صبح
سلام
void showDGV_Aza(string select)
{
DataTable dt_Aza = new DataTable();
dt_Aza = Database.Query_select(select);
DGV_Aza.DataSource = dt_Aza;

for (int i = 0; i < DGV_Aza.RowCount; i++)
{
DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value =
DateTime.Parse(shamsi_miladi.miladiTOshamsi(DateTi me.Parse(DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value.ToString()))).ToShortDateString();
}
DGV_Aza.Show();
}


شما توی حلقه for دارید اطلاعات یک ستون رو تغییر میدید می ریزید تو همون ستون؟ خب همون اول قبل از اینکه دیتاتیبل رو بریزید توی دیتاگریدویو، توی همون دیتاتیبل تغییرات رو اعمال کنید و بعد نمایش بدید.
دوم اینکه خروجی متد تبدیل تاریخ شما string هست، خب شما می تونید همین خروجی رو توی ستون مورد نظر نمایش بدید چرا دوباره تبدیل به DateTime شده و بعد دوباره با متد ToShortDateString تبدیل به string کردید.

asbabi
دوشنبه 22 تیر 1394, 10:52 صبح
سلام
void showDGV_Aza(string select)
{
DataTable dt_Aza = new DataTable();
dt_Aza = Database.Query_select(select);
DGV_Aza.DataSource = dt_Aza;

for (int i = 0; i < DGV_Aza.RowCount; i++)
{
DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value =
DateTime.Parse(shamsi_miladi.miladiTOshamsi(DateTi me.Parse(DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value.ToString()))).ToShortDateString();
}
DGV_Aza.Show();
}


شما توی حلقه for دارید اطلاعات یک ستون رو تغییر میدید می ریزید تو همون ستون؟ خب همون اول قبل از اینکه دیتاتیبل رو بریزید توی دیتاگریدویو، توی همون دیتاتیبل تغییرات رو اعمال کنید و بعد نمایش بدید.
دوم اینکه خروجی متد تبدیل تاریخ شما string هست، خب شما می تونید همین خروجی رو توی ستون مورد نظر نمایش بدید چرا دوباره تبدیل به DateTime شده و بعد دوباره با متد ToShortDateString تبدیل به string کردید.

ضمن تشکر
در مورد اون قسمت که گفتین تو دیتاتیبل تغییرات را بدم و بعد تو دیتاگریدویو نمایش داده بشه حرف شما کاملا درسته و این کار رو کردم (:تشویق:) اما مشکل بنده با تغییر در دیتاتیبل هم رفع نشد.
در مورد قسمتی هم که گفتین چرا از string به datetime و باز به toshorttimestring , .... تبدیل می کنم اینجا توضیح میدهم.

asbabi
دوشنبه 22 تیر 1394, 13:03 عصر
وقتی دیتاتیبل را ایجاد و با دستور select پر می کنم، اگر اشتباه نباشه، فکر می کنم که چون فیلد تاریخ را در اس کیو ال از نوع date تعیین کردم توی دیتاتیبل در سی شارپ هم ستون مربوط به تاریخ از نوع DateTime تعیین میشه برای همین سی شارپ اجازه نمیده بنده تاریخ رو از نوع string به دیتاتیبل وارد کنم و باید حتما با استفاده از تابع DateTime.Parse اول به تاریخ تبدیلش کنم و بعد در دیتاتیبل درج کنم (یعنی تاریخ میلادی را با نوع Date از دیتاتیبل بخونم و سپس به تاریخ شمسی از نوع رشته ای با استفاده از توابع بالا تبدیل کنم و بعد الزاما! با استفاده از تابع DateTime.Parse تاریخ شمسی را از نوع string به نوع DateTime تبدیل کنم و در دیتاتیبل درج کنم.
ولی در چهارتاریخ گفته شده تابع DateTime.Parse خطا میگیره.
انشااله که خوب توضیح داده باشم چون خودم گیج شدم. :متعجب::گیج::افسرده:

Mahmoud Zaad
دوشنبه 22 تیر 1394, 13:18 عصر
مشکل شما دقیقاً همینجاست، شما می تونی یه ستون جدید در دیتاتیبل ایجاد کنی که نوعش string باشه و تاریخ شمسی رو در اون ستون درج کنی. تاریخ میلادی هم باشه Visibleش رو فالس کن.

DataTable dt_Aza = new DataTable();
dt_Aza.Columns.Add("shamsi", typeof(string));

اگه خواستید متد showDGV_Aza رو که تغییر دادید اینجا کپی کنید تا تغییرات رو اعمال کنم.

asbabi
دوشنبه 22 تیر 1394, 16:14 عصر
مشکل شما دقیقاً همینجاست، شما می تونی یه ستون جدید در دیتاتیبل ایجاد کنی که نوعش string باشه و تاریخ شمسی رو در اون ستون درج کنی. تاریخ میلادی هم باشه Visibleش رو فالس کن.

DataTable dt_Aza = new DataTable();
dt_Aza.Columns.Add("shamsi", typeof(string));

اگه خواستید متد showDGV_Aza رو که تغییر دادید اینجا کپی کنید تا تغییرات رو اعمال کنم.



void showDGV_Aza(string select)
{
DataTable dt_Aza = new DataTable();

dt_Aza = Database.Query_select(select);
dt_Aza.Columns.Add("tarikh_engheza_parvaneh_shamsi", typeof(string));

for (int i = 0; i < dt_Aza.Rows.Count; i++)
{
dt_Aza.Rows[i]["tarikh_engheza_parvaneh_shamsi"] = shamsi_miladi.miladiTOshamsi(DateTime.Parse(dt_Aza .Rows[i]["tarikh_engheza_parvaneh"].ToString()));
}

DGV_Aza.DataSource = dt_Aza;
DGV_Aza.Show();
}

توی دیتاگریدویو مقدار visible تاریخ میلادی رو اگه false کنم بعد چجوری ستون اضافه شده شمسی را نشون بدم؟ چون دیتاگریدویو مقادیرشو از دیتاتیبل میخونه و دیتاتیبل از کوئری پایگاه!
یه چیزی بهم میگه این سوالم خیلی ساده لوحانه و اشتباهه و جوابش معلومه ولی فعلا در حالت گیجی بسر می برم. :گیج:
بهرحال با اضافه کردن یک ستون به دیتاتیبل از نوع string برای نمایش تاریخ شمسی مشکل حل شد ولی ایکاش یجور دیگه بدون نیاز به تغییر نوع از DateTime به string حل میشد چون میترسم تو بقیه قسمتهای برنامه مشکل پیش بیاد.
خیلی ممنون از جوابتون که مشکل بنده را تا 99 درصد حل کرد.:تشویق:

mRizvandi
دوشنبه 22 تیر 1394, 17:22 عصر
سلام، کار ساده است و شما خودتون رو به دردسر انداختید! به هر حال دوستمون توضیحات رو دادن و من فقط یک کامنت میذارم:
بهترین کار در خصوص استفاده از تاریخ شمسی، این هست که شما تاریخ رو به صورت میلادی در بانک اطلاعاتی ثبت کنید. دلیلش هم اینه که بانکهای اطلاعاتی فعلا تاریخ شمسی رو نمی شناسند ولی با تاریخ میلادی مشکلی ندارند و می توان پرس جوهایی بر اساس تاریخ روی اطلاعات انجام داد. (با کمترین هزینه و بیشترین سرعت)
کاری که سمت برنامه باید انجام شود تغییر این اطلاعات در زمان دریافت و نمایش هست.
در زمان دریافت شمسی دریافت کرده، میلادی در بانک ثبت می کنیم. (نوع داده خروجی تاریخ است)
در زمان نمایش، میلادی دریافت کرده و شمسی نمایش می دهیم. (نوع داده برای نمایش رشته است)
نکته در همین جاست که در زمان نمایش باید از نوع داده ای رشته ای استفاده کرد تا خطای تبدیل تاریخ در نمایش به وجود نیاید. برای این منظور نباید از فیلدهای استاندارد و نوع داده تاریخ استفاده شود.
بهتر است در زمان DataBinding تبدیل تاریخ و نمایش آن صورت بگیرد.
خیلی از بخشها رو درست پیش رفتید اما نکته آخر رو باید حواستون بهش باشه (نمایش رشته متنی نه تاریخ)
موفق و پیروز باشید

Mahmoud Zaad
دوشنبه 22 تیر 1394, 18:13 عصر
الان کاری که انجام دادید، مشکلی نداره. چاره ای هم نیست و باید تاریخ شمسی رو بصورت رشته نشون بدید. منظورم از فالس کردن visible تاریخ میلادی در دیتاگریدویو بود نه در دیتاتیبل. مشکلی هم پیش نمیاد. من از اول عمرم! تاریخ شمسی رو به شکل رشته ای ذخیره می کنم و تا الان مشکلی هم نداشتم.

علی فتحی
سه شنبه 23 تیر 1394, 00:39 صبح
اقای محمود زاد حتما تاحالا نیاز نشده ازش استفاده کنی .برای مقایسه تاریخ شمسی و ذخیره به متن در بانک اطلاعاتی با مشکل جدی برخورد میکنی . لطفا امتحان کن مثلا فاصلیه بین دو تاریخ . با datediff رو در بانک .انجام بده ببین اصلا درست کار میکنه اگر کارکرد ممنون میشم نمونه رو در همین تاپیک بگذاری با تشکر

علی فتحی
سه شنبه 23 تیر 1394, 00:45 صبح
منم همزمان هردو تاریخ میلادی و شمسی رو ذخیره میکنم .بعدا استفاده راحته دیگه هر جا خواستم از دوتاییشون استفاده میکنم.

asbabi
سه شنبه 23 تیر 1394, 08:28 صبح
با تشکر از mahmoud zaad مشکل بنده تا 99.99 درصد حل شد.
از همه دوستان ممنونم.:لبخندساده:

Mahmoud Zaad
سه شنبه 23 تیر 1394, 08:54 صبح
اقای محمود زاد حتما تاحالا نیاز نشده ازش استفاده کنی .برای مقایسه تاریخ شمسی و ذخیره به متن در بانک اطلاعاتی با مشکل جدی برخورد میکنی . لطفا امتحان کن مثلا فاصلیه بین دو تاریخ . با datediff رو در بانک .انجام بده ببین اصلا درست کار میکنه اگر کارکرد ممنون میشم نمونه رو در همین تاپیک بگذاری با تشکر
خب بعضی موارد رو در سمت برنامه انجام میدم نه بانک اطلاعاتی. البته برای کارهای معمول مثل بازیابی اطلاعات یک تاریخ خاص (select*from table where date=@date)، اطلاعات بین دو تاریخ (select... where date Between @t1 AND @t2) و مواردی از این دست که بسیار پر کاربرد هستند و تقریباً 80-90 درصد برنامه ها رو تشکیل میدن مشکلی نبوده. خوبی این کار هم این هست که بعد از هر بار واکشی اطلاعات نیاز به تبدیل تاریخ نیست بویژه اگه تعداد رکوردها زیاد باشه.