در این مقاله قصد داریم به بحث تبدیل تاریخ میلادی به شمسی و برعکس در ASP.net MVC بپردازیم. فرض کنید در پایگاه داده SQL خود یکی از ستونهای جدول شما از نوع datetime باشد برای ذخیرهسازی زمان ملزم به استفاده از تاریخ میلادی هستیم. البته خوشبختانه دات نت از تاریخ هجری شمسی پشتیبانی میکند. پس بهراحتی میتوان هنگام ثبت تاریخ و زمان در دیتابیس ان را به میلادی ذخیره کرده و هنگام فراخوانی به هجری شمسی تبدیل کنیم.
کلاس PersianCalendar برای تبدیل تاریخ میلادی به شمسی
برای استفاده از این قابلیت نیاز است در فضای نام System.Globalization کلاس PersianCalendar را فراخوانی کنیم. کلاس PersianCalendar دارای متدهایی گوناگونی است که در ادامه به برخی از آنها اشاره میکنیم:
(ToDateTime (int yaer, int month, int day, int hour, int minute, int second, int millisecond :
این متد تاریخ را از هجری شمسی به میلادی تبدیل میکند، بهاینترتیب که سال، ماه و روز (به هجری شمسی) را گرفته و شیء ای از نوع DateTime برای ما برمیگرداند. ما میتوانیم از همین شی DateTime برگردانده شده توسط این متد برای نوشتن تاریخ در پایگاه داده استفاده کنیم.
(GetDayOfMonth (DateTime time:
این متد شی ای از نوع DateTime را به عنوان آرگومان میپذیرد و یک عدد integer برمیگرداند.
این عدد نشاندهنده چندمین روز ماه در تاریخ هجری شمسی هست.
(GetMonth (DateTime time :
این متد شی ای از نوع DateTime را بهعنوان آرگومان میپذیرد و یک عدد integer برمیگرداند.
این عدد نشاندهنده چندمین ماه سال در تاریخ هجری شمسی است.
(GetYear (DateTime time :
این متد شی ای از نوع DateTime را بهعنوان آرگومان میپذیرد و یک عدد integer برمیگرداند.
این عدد نشاندهنده سال در تاریخ هجری شمسی میباشد.
استفاده از اکستنشن متد برای تبدیل تاریخ
- ابتدا ایمپورت های لازم را فراخوانی میکنیم.
- سپس یک ماژول ایجاد میکنیم. (در این مثال ما از زبان VB.net استفاده کردهایم)
- اگر از زبان سی شارپ استفاده میکنید باید یک class ایجاد کنید.
Imports Microsoft.VisualBasic Imports System.Runtime.CompilerServices Imports System.Globalization Imports System.Dynamic Imports System.IO Imports System.Drawing Imports System.Drawing.Imaging Public Module myExtention Public Enum ImageComperssion
- دو تابع به نام topersian ایجاد کردیم یکی پاسخ را بهصورت String و دومی از نوع Datetime برمیگرداند.
- پارامتر ورودی این تابع از جنس DateTime میلادی است.
<Extension()> Public Function topersian(ByVal DT As DateTime) As String Dim pc As PersianCalendar = New PersianCalendar Dim PersianDateTime As DateTime = New DateTime(pc.GetYear(DT), pc.GetMonth(DT), pc.GetDayOfMonth(DT)) Return PersianDateTime.ToString("yyyy/MM/dd") End Function
<Extension()> Public Function topersianDate(ByVal DT As DateTime) As DateTime Dim pc As PersianCalendar = New PersianCalendar Dim PersianDateTime As DateTime = New DateTime(pc.GetYear(DT), pc.GetMonth(DT), pc.GetDayOfMonth(DT), pc.GetHour(DT), pc.GetMinute(DT), 0) Return PersianDateTime End Function
- برای تبدیل تاریخ شمسی به میلادی هم از تابع زیر استفاده میکنیم.
<Extension()> Public Function toMiladi(ByVal DT As DateTime) As DateTime Dim pc As PersianCalendar = New PersianCalendar Return pc.ToDateTime(DT.Year, DT.Month, DT.Day, DT.Hour, DT.Minute, 0, 0) End Function