PDA

View Full Version : مقاله: تبدیل تاریخها, تبدیل حروف ی و ک عربی به فارسی با استفاده از Persia .NET 3.0



xcomlock
جمعه 16 دی 1390, 11:58 صبح
کتابخانه Persia .NET 3.0 شامل چند کلاس مختلف در قالب یک Class Library می باشد که بصورت یک فایل dll قابل استفاده می باشد. این کتابخانه در واقع یک API می باشد که توابع مختلفی را برای تبدیل تاریخهای میلادی، هجری شمسی و هجری قمری در اختیار برنامه نویسان NET. می گذارد. برای اضافه کردن قابلیت استفاده از این توابع به یک پروژه، همانند سایر کامپوننتها و کتابخانه ها، آن را به سایرreference های یک پروژه اضافه می کنیم. بدین ترتیب کلاسCalendar در اختیار قرار می گیرد و می توان از متدها و مشخصه های آن استفاده نمود. برای تبدیل تاریخها به یکدیگر از توابع و مشخصه های موجود در کلاسCalendar استفاده می کنیم.

اگر از Silverlight استفاده می کنید فایل PersiaSL.dll را به پروژه خود اضافه کنید و برای سایر برنامه ها از فایل Persia.dll استفاده کنید.
تبدیل تاریخ میلادی به شمسی:

برای این تبدیل می بایست از تابع ConvertToPersian استفاده کنیم. این تابع دارای ۳ overload می باشد. لذا ۳ سری پارامتر مختلف را می توان برای آن در نظر گرفت .

مقدار برگشتی این تابع از نوع کلاس SolarDate می باشد. برای نمایش تاریخ بدست آمده کافیست از تبدیل کننده ()ToString استفاده کنیم. کلاس SolarDate دارای ۵ مشخصه می باشد که عبارتند از:

80239

همانطور که گفته شد برای تبدیل تاریخ شمسی بدست آمده به فرمت string بطوریکه قابل نمایش باشد می توان از تابع ()ToStringاستفاده کرد. همانند کد زیر:

Persia.SolarDate solarDate = Persia.Calendar.ConvertToPersian(DateTime.Now);
// getting the simple format of persian date
string str = solarDate.ToString();

همانطور که می دانید تاریخ شمسی را به فرمت های متنوعی می توان نمایش داد. برای راحتی کار برنامه نویسان، کلاس SolarDate تعداد زیادی از این فرمتها را بصورت پیش فرض در خود گنجانده است که به راحتی به همراه تابع ()ToString می توان آنها را مورد استفاده قرار داد. جدول زیر این فرمتها و پارامتر مورد نیاز برای به کار گیری به همراه تابع ()ToString را نشان می دهد.

80242

همنطور که در جدول فوق مشاهده می شود ۶ فرمت آخری مربوط به فرمتهای ساعت می شوند. این فرمتها می توانند به همراه فرمت تاریخ نیز به کار روند مانند کد زیر:

string str = solarDate.ToString("H,w");

دقت داشته باشید که برخی از این فرمتها یا ترکیب آنها به راست به چپ و یا چپ به راست بودن کنترل و یا محل مورد نظر برای نشان دادن آن حساس می باشد. اگر با چنین مشکلی روبرو شدید باید جهت کنترل یا تگ html مربوطه را تغییر دهید.

ممکن است فرمت مورد نظر شما در جدول فوق نباشد، در این حالت با داشتن مشخصه ArrayType از کلاس SolarDate خود می توانید به راحتی فرمت مورد نظرتان را ایجاد کنید.

برخی دیگر از فرمتهایی که به همراه تاریخ و ساعت به کار می رود، نشان دادن مدت می باشد. کتابخانه Persia در نسخه جدید خود تعدادی از این فرمتها را به طور پیش فرض در خود قرار داده که به همراه تابع ()ToRelativeDateString و پارامتر مربوطه مورد استفاده قرار می گیرند.

مثلا" فرض کنید که تاریخ ثبت یک خبر را ذخیره کرده اید حال می خواهید تا زمانی که 5 روز از درج آن خبر نگذشته است تاریخ انتشار آن خبر بصورت زیر نمایش داده شود.

با گذشت یک روز: ۱ روز پیش

با گذشت دو روز: ۲ روز پیش

با گذشت پنج روز پیش: ۵ روز پیش

برای این حالت از تابع ()ToRelativeDateString به صورت زیر استفاده می کنیم:

string str = solarDate.ToRelativeDateString ("D,5");

هرگاه تاریخ درج خبر مورد نظر فراتر از ۵ روز شود خروجی به طور خودکار تنها فرمت ساده تاریخ انتشار آن خبر را در بر خواهد داشت.

پیش فرض این پارامتر (پارامتر D) مقدار ۳۰ روز است. یعنی اگر در مثال فوق عدد ۵ را لحاظ نکنیم و کد فوق را بصورت:

string str = solarDate.ToRelativeDateString ("D");

بنویسیم خروجی تا ۳۰ روز بعد از انتشار خبر بصورت x روز پیش نمایش داده خواهد شد.

با در نظر داشتن این مثال می توانید لیست کامل این فرمتها به همراه پارامتر مورد نیاز را در جدول زیر مشاهده نمایید.

80244


پیش فرض ها و همچنین مقادیر بیشینه برای پارامترهای فوق در مورد ساعت ۲۴ ساعت، دقیقه ۶۰ دقیقه و اکنون ۵ دقیقه، می باشد. در صورتی که بخواهید پیش فرضها را تغییر دهید می توانید عدد مورد نظر خود را با یک کاما به پارامتر مربوطه بیافزایید. مانند مثال زیر:
string str = solarDate.ToRelativeDateString (“p,4,60,22”);

در این مثال خروجی تا قبل از ۴ دقیقه عبارت اکنون را برمی گرداند سپس تا ۶۰ دقیقه عبارت x دقیقه پیش نشان داده می شود و سپس تا ۲۲ ساعت بعد عبارت x ساعت پیش نمایش داده می شود.

تبدیل تاریخ شمسی به میلادی:

برای این تبدیل از تابع ConvertToGregorian استفاده می شود. این تابع دارای ۴ overload می باشد. بدین معنی که ۴ سری پارامتر مختلف را می توان برای آن در نظر گرفت. نوع برگشتی این تابع از نوع کلاس DateTime می باشد.

DateTime ConvertToGregorian(SolarDate solarDate)
DateTime ConvertToGregorian(LunarDate lunarDate)
DateTime ConvertToGregorian(int year, int month, int day, DateType dateType)
DateTime ConvertToGregorian(int year, int month, int day, int hour, int minute, int
second, DateType dateType)


تبدیل تاریخ شمسی به قمری:

برای این تبدیل از تابع ConvertToIslamic استفاده می شود. این تابع دارای ۳ overload می باشد. لذا ۳ سری پارامتر مختلف را می توان برای آن در نظر گرفت.

LunarDate ConvertToIslamic(DateTime date)
LunarDate ConvertToIslamic(SolarDate solarDate)
LunarDate ConvertToIslamic(int year, int month, int day, DateType dateType)

نوع برگشتی این تابع از نوع کلاس LunarDate می باشد که دارای مشخصه های زیر است.

80245

برای نمایش تاریخ قمری نیز فرمت های متنوعی را می توان به کار برد. که چند نمونه از آنها بصورت پیش فرض در کتابخانه Persia آورده شده اند که در جدول زیر پرامترهای آن مشخص شده اند.

80246

توجه داشته باشید که تاریخ قمری که در کتابخانه Persia تبدیل می شود همانند تاریخ قمری بکار رفته در NET Framework. می باشد که با تاریخ قمری مورد استفاده در کشور کمی متفاوت است.


تبدیل اعداد لاتین به اعداد فارسی:

شاید در برخی از سایتهای فارسی زبان دیده اید که با توجه به اینکه متنها با فونتهای فارسی نوشته شده اند اما اعداد بصورت لاتین نمایش داده شده اند. این چندان خوشایند نیست که از اعداد لاتین در یک متن فارسی استفاده کنیم. برای این مشکل راه حلهای بسیاری وجود دارد که استفاده از همه آنها نیز بسیار راحت می باشد. کتابخانه Persia نیز یک راه حل ساده را معرفی کرده است که در نسخه قبلی این کتابخانه نیز وجود داشت. برای تبدیل اعداد لاتین به فارسی تنها کافیست که عدد مربوطه را با تابع ToPersianString از کلاس PersianWord پاس کنید. مقدار برگشتی این تابع همان اعداد منتها به صورت فارسی می باشد.

String persianNumber = Persia.PersianWord.ToPersianString(12345);

تبدیل حروف ی و ک عربی به فارسی:

حتما" بارها با این مشکل مواجه شده اید که وقتی اسمی را که شامل حرف ی و یا ک باشد در دیتابیس جستجو می کنید، چیزی از این جستجو حاصل نمی شود ولی یقین دارید که اسم مربوطه در دیتابیس موجود است. این مشکل وقتی به وقوع می پیوندد که آن اسم با حروف ی و ک عربی به دیتابیس وارد شده اند و شما برای جستجو حروف ی و یا ک فارسی را تایپ کرده اید (و یا بلعکس). برای اینکه همیشه حروف فارسی ی و ک را به دیتابیس و هرجایی دیگر که بعدا" مورد جستجو قرار می گیرد، وارد کنید می توانید باز هم از تابع ToPersianString استفاده نمایید. در این اینصورت همیشه اطمینان دارید که هر رشته ای را که به این تابع پاس می کنید مقدار برگشتی آن دارای حروف ی و ک عربی نمی باشد.

دریافت Persia.NET 3.0 (http://www.persiadevelopers.com/components/Persia/persia.zip)

منبع : PersiaDevelopers.com

arefba
جمعه 16 دی 1390, 15:18 عصر
عالی بود
خیلی کامل توضیح داده بودید

tirdad khosravi
شنبه 17 دی 1390, 15:10 عصر
مرسی واقعا عالی بود

modern_amin
یک شنبه 18 دی 1390, 10:26 صبح
سلام ، واقعا بی نظیر بود
.
لطفا در مورد DaysPast مثالی بزنید
(اگر مقدور هست از کل امکانات این dll نمونه سورسی رو اینجا بذارید)

sadra1234
یک شنبه 18 دی 1390, 10:55 صبح
دوست عزیز میشه pdf آموزشتون رو هم بزارین

modern_amin
یک شنبه 18 دی 1390, 11:14 صبح
من اینو پیدا کردم
http://barnamenevis.org/attachment.php?attachmentid=8871&d=1180857430

اسماعیل ابراهیمی
یک شنبه 18 دی 1390, 11:40 صبح
واقعاً وحشتناک بود ... مـــــــــرســـــــی

pardisannet
دوشنبه 18 اردیبهشت 1391, 00:11 صبح
دوست عزیز سلام . من از .topersianstring که استفاده میکنم متاسفانه همه رو تبدیل میکنه به 1704 و دیگه پیدشون نمیکنه. لطفا راهنمایی کنید.

شرلوک هلمز
دوشنبه 18 اردیبهشت 1391, 08:33 صبح
ممنون خیلی خوب بود

jmfnima
دوشنبه 18 اردیبهشت 1391, 09:18 صبح
آقا واقعا دستت درد نکنه با این مطالبی که گذاشتی .

Ali_M_K
سه شنبه 25 فروردین 1394, 10:27 صبح
ممنون خیلی خوب بود
خسته نباشید (y)