دوشنبه ۲۷ دی ۱۳۹۵
 
 
 
کلمه عبور خود را فراموش کرده اید؟
 

 
 
 تبدیل تاریخها با استفاده از Persia .NET 3.0
.NET
تاریخ ثبت:  ۸۹/۱۱/۲۳
تعداد نمایش:  ۳۴۱۱۳
  نویسنده: مجید شهاب فر
 
   ۴۳  نفر تا این لحظه به این مقاله امتیاز داده اند.
 
   Bookmark and Share

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

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

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

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

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

نام مشخصه

نوع

توضیحات

ArrayType

آرایه از نوع int

یک آرایه 6 المانی از نوع int می باشد که شامل عدد سال، ماه، روز، ساعت، دقیقه و ثانیه می باشد. اعداد مربوط به ساعت، دقیقه و ثانیه در ویرایش 3 این کتابخانه اضافه شده اند.

DayOfWeek

int

در بر گیرنده عدد روز در هفته می باشد. 0 =شنبه و 6=جمعه

DaysPast

int

نشان دهنده تعداد روزهای سپری شده از اول سال شمسی می باشد. این مشخصه در ویرایش 3 اضافه شده است.

DaysRemain

int

نشان دهنده تعداد روزهای باقیمانده تا پایان سال شمسی می باشد. این مشخصه نیز در ویرایش 3 اضافه شده است.

IsLeapYear

bool

کبیسه یا عادی بودن سال مورد نظر را مشخص می کند.



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

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

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


مثال خروجی

پارامتر به کار رفته در تابع ()ToString 

1389/09/30

ToString()

89/09/30

ToString("L")

۱۳۸۹/۹/۳۰

ToString("D")

۸۹/۹/۳۰

ToString("d")

سی ام  آذر ۱۳۸۹

ToString("F")

سی ام  آذر ۸۹

ToString("f")

سه شنبه  ۱۳۸۹/۹/۳۰

ToString("W")

سه شنبه  ۸۹/۹/۳۰

ToString("w")

سه شنبه  سی ام  آذر ۱۳۸۹

ToString("S")

سه شنبه  سی ام  آذر ۸۹

ToString("s")

۳۰ آذر ۱۳۸۹

ToString("M")

۳۰ آذر ۸۹

ToString("m")

سه شنبه  ۳۰ آذر ۱۳۸۹

ToString("N")

سه شنبه  ۳۰ آذر ۸۹

ToString("n")

سه شنبه  ۳۰ آذر

ToString("g")

آذر ۱۳۸۹

ToString("E")

آذر ۸۹

ToString("e")

۳۰ آذر

ToString("Q")

سی ام  آذر

ToString("q")

  ۱۹ : ۵۰

ToString("H")

ساعت   ۱۹ : ۵۰

ToString("R")

  ۷ : ۵۰ بعد از ظهر

ToString("HH")

  ۷ : ۵۰  ب. ظ

ToString("hh")

ساعت   ۷ : ۵۰ بعد از ظهر

ToString("T")

ساعت   ۷ : ۵۰ ب. ظ

ToString("t")



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

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 روز پیش نمایش داده خواهد شد.

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

مثال خروجی

پارامتر به کار رفته در تابع ()ToRelativeDateString 

X روز پیش (پیش فرض 30 روز)

ToRelativeDateString("D")

امروز

ToRelativeDateString ("T")

امروز، دیروز

ToRelativeDateString ("Y")

امروز، دیروز، x  روز پیش (پیش فرض یک هفته)

ToRelativeDateString ("TY")

اکنون (کمتر از پنج دقیقه، پیش فرض پنج دقیقه)

ToRelativeDateString ("N")

X دقیقه پیش (کمتر از 60 دقیقه، پیش فرض 60 دقیقه)

ToRelativeDateString ("M")

X  ساعت پیش (کمتر از 24 ساعت، پیش فرض 24 ساعت)

ToRelativeDateString ("H")

کمتر از یک ساعت پیش

ToRelativeDateString ("h")

کمتر از یک دقیقه پیش

ToRelativeDateString ("m")

اکنون، x دقیقه پیش

ToRelativeDateString ("n")

اکنون، x دقیقه پیش، x ساعت پیش

ToRelativeDateString ("p")

اکنون، x دقیقه پیش، امروز

ToRelativeDateString ("t")


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

پیش فرض ها و همچنین مقادیر بیشینه برای پارامترهای فوق در مورد ساعت ۲۴ ساعت، دقیقه ۶۰ دقیقه و اکنون ۵ دقیقه، می باشد. در صورتی که بخواهید پیش فرضها را تغییر دهید می توانید عدد مورد نظر خود را با یک کاما به پارامتر مربوطه بیافزایید. مانند مثال زیر:

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 می باشد که دارای مشخصه های زیر است.

نام مشخصه

نوع

توضیحات

ArrayType

آرایه از نوع int

یک آرایه 3 المانی از نوع int می باشد که شامل عدد سال، ماه، روز، ساعت، دقیقه و ثانیه می باشد. اعداد مربوط به ساعت، دقیقه و ثانیه در ویرایش 3 این کتابخانه اضافه شده اند.

DayOfWeek

int

در بر گیرنده عدد روز در هفته می باشد. 0 =شنبه و 6=جمعه

IsLeapYear

bool

کبیسه یا عادی بودن سال مورد نظر را مشخص می کند.


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

مثال خروجی

پارامتر به کار رفته در تابع ToString()

1432/03/28

ToString()

۲۸ /۱۴۳۲

ToString("H")

۲۸ ربیع الاول ۱۴۳۲

ToString("M")

پنجشنبه  ۲۸ ربیع الاول ۱۴۳۲

ToString("D")

الخمیس  ۲۸ ربیع الاول ۱۴۳۲

ToString("N")


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


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

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


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

پارامتری که تابع ToPersianString می گیرد از نوع object می باشد پس می توان متغیرها با انواع مختلف را به آن پاس کرد. حتی می توان یک متن رشته ای کوتاه یا بلند که شامل اعداد لاتین می باشد را نیز به آن پاس کرد تا اعدادش به اعداد فارسی تغییر یابند.   

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

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

اگر فکر می کنید که دیر جنبیده اید و دیتابیس شما دارای داده های رشته ای بسیاریست که در آنها حروف ی و ک عربی وجود دارند، می توانید برای تبدیل آنها از روش ذکر شده در مقاله زیر استفاده کنید. 

مشكل ي و ك فارسي و عربي در يك ديتابيس اس كيوال سرور

به هرحال برای اینکه داده های رشته ای که بصورت فارسی در دیتابیس ذخیره می کنید، یکدست باشند بهتر از قبل از وارد کردن آنها در دیتابیس، آن داده ها را فیلتر کنید.


دریافت Persia.NET 3.0

  کیفیت مقاله ارائه شده از نظر شما   
برای دادن رتبه به این مقاله می بایست Login کرده باشید.
  درباره نویسنده
مجید شهاب فر
طراح، برنامه نویس و مدیر PersiaDevelopers.com
همه مقاله های نوشته شده توسط این کاربر (۱۸)
 
  پیام جدید
صفحه ۱ - پیامهای اصلی ۱ تا ۱۰ از مجموع ۲۵ پیام اصلی
اولین قبلی بعدی

 عنوان فرستنده تاریخ
 
استفاده از dll دربرنامه دیگر ali cg ۱۳۹۴/۱۲/۲۵
 
تبدیل ارقام تاریخ بشکل فارسی همراه با @Html.EditorFor علی غیاثی ۱۳۹۴/۱۲/۱۰
پاسخ به: تبدیل ارقام تاریخ بشکل فارسی همراه با @Html.EditorFor مجید شهاب فر ۱۳۹۴/۱۲/۱۲
 
تبدیل اشتباه تاریخ قمری محسن هاشمی ۱۳۹۴/۱/۱۹
پاسخ به: تبدیل اشتباه تاریخ قمری مجید شهاب فر ۱۳۹۴/۱/۲۰
پاسخ به: تبدیل اشتباه تاریخ قمری مجید شهاب فر ۱۳۹۴/۱/۲۰
پاسخ به: تبدیل اشتباه تاریخ قمری محسن هاشمی ۱۳۹۴/۱/۲۰
 
تبدیل تاریخ شمسی به میلادی حسین حسین ۱۳۹۳/۱۰/۲۸
پاسخ به: تبدیل تاریخ شمسی به میلادی مجید شهاب فر ۱۳۹۳/۱۰/۲۹
 
پشتیبانی از ویندوز فون رامین حسی ۱۳۹۳/۶/۲۳
پاسخ به: پشتیبانی از ویندوز فون Persia Developers ۱۳۹۳/۶/۲۳
 
تبدیل دو نوع تاریخ به یکدیگر میلاد محمدی ۱۳۹۳/۴/۱۸
پاسخ به: تبدیل دو نوع تاریخ به یکدیگر Persia Developers ۱۳۹۳/۴/۱۸
پاسخ به: تبدیل دو نوع تاریخ به یکدیگر میلاد محمدی ۱۳۹۳/۴/۱۸
پاسخ به: تبدیل دو نوع تاریخ به یکدیگر Persia Developers ۱۳۹۳/۴/۱۹
 
گرفتن ماه شمسی و مشخص کردن تعداد روزهای آن بهرام محمدی ۱۳۹۳/۴/۱۳
پاسخ به: گرفتن ماه شمسی و مشخص کردن تعداد روزهای آن مجید شهاب فر ۱۳۹۳/۴/۱۳
پاسخ به: گرفتن ماه شمسی و مشخص کردن تعداد روزهای آن بهرام محمدی ۱۳۹۳/۴/۱۴
پاسخ به: گرفتن ماه شمسی و مشخص کردن تعداد روزهای آن بهرام محمدی ۱۳۹۳/۴/۱۶
 
امکانات جدید برای کتابخانه رامین پور ۱۳۹۱/۱۰/۳۰
پاسخ به: امکانات جدید برای کتابخانه مجید شهاب فر ۱۳۹۱/۱۰/۳۰
پاسخ به: امکانات جدید برای کتابخانه رامین پور ۱۳۹۱/۱۱/۱
پاسخ به: امکانات جدید برای کتابخانه مجید شهاب فر ۱۳۹۱/۱۱/۱
پاسخ به: امکانات جدید برای کتابخانه رامین پور ۱۳۹۱/۱۱/۲
 
تبديل عدد انگليسي سال به سال فارسي و همينطور ماه بهاره فیضی ۱۳۹۱/۹/۲۰
پاسخ به: تبديل عدد انگليسي سال به سال فارسي و همينطور ماه مجید شهاب فر ۱۳۹۱/۹/۲۱
پاسخ به: تبديل عدد انگليسي سال به سال فارسي و همينطور ماه بهاره فیضی ۱۳۹۱/۹/۲۲
پاسخ به: تبديل عدد انگليسي سال به سال فارسي و همينطور ماه مجید شهاب فر ۱۳۹۱/۹/۲۳
 
مشکل با اعداد داخل متن مهدی علایی ۱۳۹۱/۸/۱۰
پاسخ به: مشکل با اعداد داخل متن مهدی علایی ۱۳۹۱/۸/۱۰
پاسخ به: مشکل با اعداد داخل متن مجید شهاب فر ۱۳۹۱/۸/۱۰
اولین قبلی بعدی

Copyright © 2006 - 2016 All Rights Reserved.
Please direct your questions or comments to