تبدیل تاریخ میلادی به شمسی و بر عکس در ASP.net MVC

در این مقاله قصد داریم به بحث تبدیل تاریخ میلادی به شمسی و برعکس در 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

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *