PDA

View Full Version : مقاله: نوع PersianDateTime



jalalx
سه شنبه 15 تیر 1389, 12:44 عصر
با سلام خدمت دوستان عزیز
همیشه برای ما برنامه نویسان ایرانی بحث تاریخ شمسی و تبدیلات و غیره وجود داشته. هر برنامه نویس معمولا به روش خودش توابعی درست می کرده و اونو هنگام نیاز تو برنامه Copy و Paste می کرده.
من به نوبه ی خودم بلاخره یه روز من نشستم و برای رهایی از Copy و Paste یک Struct مشابه شیء DateTime طراحی کردم.
توی نوع PersianDateTime من از اینترفیس های IComparable, IFormattable, IConvertible اشتقاق گرفتم. اما قسمتی از کار مونده...
امیدوارم با کمک شما در کامل کردن این استراکچر بلاخره یک شیء مناسب برای زخیره ی تاریخ های نوع شمسی ایجاد کرده باشیم.
من این Structure رو به صورت یک Template در اوردم. اونو تو مسیر Template های ویژوال استودیو قرار بدید و از اون استفاده کنید.
لطفا باگ های احتمالی رو (از اونجا که نوشته ی یک نفر انسانه!!!) در هینجا بذارید تا در اسرع وقت توسط من یا دوستان حل بشه!

jalalx
سه شنبه 15 تیر 1389, 12:51 عصر
برای استفاده از توابع تبدیلی کافیه به شکل زیر عمل کنید...
تبدیل میلادی به شمسی...


PersianDateTime date1 = PersianDateTime.ToPersianDateTime(DateTime.Now);
کد بالا تاریخ میلادی امروز رو به شمسی تبدیل می کنه...
حتی می شه به این طریق استفاده کرد...!


PersianDateTime date2 = (PersianDateTime)DateTime.Now;
و اما برعکس!
برای تبدیل تاریخ شمسی به میلادی کافیه اینطوری عمل کنید...


DateTime date3 = date2.ToGregorianDateTime();
فکر نمی کنم استفاده ازش زیاد سخت باشه!
منتظر نظراتتونم.

NIK
سه شنبه 15 تیر 1389, 13:07 عصر
آخه کامپوننت آماده واسه این کار موجوده و معمولاً همشون جواب میدن.
من خودم یک ساله از یکی از اونها استفاده میکنم و اصلاً مشکلی نداشته. آخه الگوریتمش مشخصه فقط یه نفر با حوصله میخواد که بشینه و بنویسه. من که حالشو ندارم و از همون کامپوننت خودم استفاده میکنم.:لبخند:

jalalx
سه شنبه 15 تیر 1389, 13:23 عصر
این کامپوننت به صورت OpenSource و به صورت کلاس به برنامه اضافه می کنید. نیازی به کامپایل و یا نوشتن و برسی الگوریتم نداره...!

NIK
سه شنبه 15 تیر 1389, 13:43 عصر
این کامپوننت به صورت OpenSource و به صورت کلاس به برنامه اضافه می کنید. نیازی به کامپایل و یا نوشتن و برسی الگوریتم نداره...!

دو تا فایل dll هست که به رفرنسهات اضافه میکنی.
تقریباً مثل Datetime میشه باش برخورد کرد.


PersianDate pd = new PersianDate(DateTime.Now);
pd.AddDays(25);
string date = pd.ToLongDateString();
DateTime dt = new DateTime();
dt = PersianDate.GetGregorianDate(pt);

jalalx
پنج شنبه 17 تیر 1389, 09:42 صبح
دو تا فایل dll هست که به رفرنسهات اضافه میکنی.Import کردن فایل dll اونم برای یک کار ساده و جزئی یکم زیاد به نظر نمی رسه؟
کلاس ارایه شده یا دقیق تر بگم struct ارائه شده رو می تونید بر حسب نیاز خودتون customize کنید!:لبخندساده: اضافه کردنش هم فقط کافیه Add New Item...

omidrayaneh.68
پنج شنبه 17 تیر 1389, 09:56 صبح
بله شما دوست عزیز درست عرض کردید این کار خیلی ساده است و باید از کد های زیر استفاده کنید چون خود ویژوال استودیو همچین حالتی داره که بتونید به تاریخ شمسی تبدیل کنید



using System.Globalization;





protected void Page_Load(object sender, EventArgs e)
{
PersianCalendar newcal = new PersianCalendar();
lbldate .Text = newcal.GetDayOfMonth(DateTime.Now).ToString()
+ "/" + newcal.GetMonth(DateTime.Now).ToString() +
"/" + newcal.GetYear(DateTime.Now).ToString();

}

jalalx
چهارشنبه 30 تیر 1389, 16:36 عصر
بله شما دوست عزیز درست عرض کردید این کار خیلی ساده است و باید از کد های زیر استفاده کنید چون خود ویژوال استودیو همچین حالتی داره که بتونید به تاریخ شمسی تبدیل کنید



using

System.Globalization;




protected

void Page_Load(object sender, EventArgs e)
{
PersianCalendar newcal = newPersianCalendar();
lbldate .Text = newcal.GetDayOfMonth(DateTime.Now).ToString()
+ "/" + newcal.GetMonth(DateTime.Now).ToString() +
"/" + newcal.GetYear(DateTime.Now).ToString();

}



نمی خوام به اجبار کسی رو وادار به استفاده از این شی کنم ولی یه add new item و:



lbldate.Text = PersianDateTime.Now.ToShortDateString();



کدوم کوتاه تره؟

si6arp
پنج شنبه 02 تیر 1390, 09:11 صبح
با سلام دوست من.
من این کلاس رو به پروژه اضافه کردم اما از $safeitemname$ اشکال میگیره و کامپایل نمیشه ! میشه من رو راهنمایی کنید ؟

si6arp
پنج شنبه 02 تیر 1390, 09:16 صبح
دو تا فایل dll هست که به رفرنسهات اضافه میکنی.
تقریباً مثل Datetime میشه باش برخورد کرد.


PersianDate pd = new PersianDate(DateTime.Now);
pd.AddDays(25);
string date = pd.ToLongDateString();
DateTime dt = new DateTime();
dt = PersianDate.GetGregorianDate(pt);

25 این وسط چیکار میکنه ؟
متغیر pt کلا" وجود نداره !
شما که داری فایل میزاری زحمت بکش کامل بزار

si6arp
پنج شنبه 02 تیر 1390, 09:29 صبح
نمی خوام به اجبار کسی رو وادار به استفاده از این شی کنم ولی یه add new item و:



lbldate.Text = PersianDateTime.Now.ToShortDateString();



کدوم کوتاه تره؟




با سلام دوست من.
من این کلاس رو به پروژه اضافه کردم اما از $safeitemname$ اشکال میگیره و کامپایل نمیشه ! میشه من رو راهنمایی کنید ؟
** از دات نت 4 استفاده میکنم.

jalalx
پنج شنبه 02 تیر 1390, 13:42 عصر
قاعدتا نباید ایرادی بگیره مگر اینکه شما این Template رو نصب نکرده باشین!
برای نصب اون کافیه Visual Studio رو ببندین، فایل zip (دقت کنید فایل .cs به تنهایی کافی نیست و باید در فایل zip باشه) رو در مسیر \Visual Studio 2010\Templates\ItemTemplates توی My Document کپی کنید. بعد دوباره Visual Studio رو اجرا کنید و توی Solution Explorer روی پروژه راست کلیک کنید و گزینه ی Add -> Add New Item رو انتخاب کنید. سپس در اون پنجره، PersianDateTime رو پیدا کنید و به پروژه اضافه کنید.

البته شما می تونید همینطوری هم فقط فایل .cs توی فایل zip رو استفاده کنید (همین کاری که الان شما کردین و به مشکل خوردین و من توصیه نمی کنم! :لبخند:)، در این کار باید به طور دستی namespace و نام کلاس رو مقدار دهی کنید. مثلا $safeitemname$ رو بذارین PersianDateTime

si6arp
پنج شنبه 02 تیر 1390, 14:28 عصر
این یک نمونه کامل از همه چیز هست .
هم تاریخ شمسی & تبدیل عدد به حروف & دیتا پیکر تاریخ شمسی و . . . . . این هم dll هست + یک پروژه کامل

http://www.4shared.com/file/0-XE2v-t/FarsiLibraryTest.html