Quantcast
Channel: .:: محمدحسین فخرآوری ::.
Viewing all articles
Browse latest Browse all 238

افزودن یک DataType جدید برای نگه‌داری تاریخ خورشیدی

$
0
0
در دو درس گذشته با DataType ای که با هم نوشتیم؛ می‌توانستیم این پرس‌وجوها را داشته باشیم:

    1. Declare @MyDate JalaliDate = '1392/02/11 21:38:24'  
    2. Select @MyDate.ToString() as MyDateTime  
    3.            , @MyDate.GetDate() as MyDate  
    4.            , @MyDate.GetTime() as MyTime  
    5.            , @MyDate.Year as MyYear  
    6.            , @MyDate.Month as MyMonth  
    7.           , @MyDate.Day as MyDay  
    8.           , @MyDate.Hour as MyHour  
    9.           , @MyDate.Minute as MyMinute  
    10.           , @MyDate.Second as MySecond  
    11.           , @MyDate.JalaliDateAdd('Year',1) as NextYear  
    12.           , @MyDate.JalaliDateAdd('Month',1) as NextMonth  
    13.           , @MyDate.JalaliDateAdd('Day',1) as NextDay  
    14.           , @MyDate.JalaliDateAdd('Hour',1) as NextHour  
    15.           , @MyDate.JalaliDateAdd('Minute',1) as NextMinute  
    16.           , @MyDate.JalaliDateAdd('Second',1) as NextSecond  

که در نهایت خروجی کار به شکل زیر خواهد بود:

با این همه، همان‌سان که در پرس‌وجوی بالا هم می‌بینید؛ ناگزیر شدم تاریخ و زمان را خودم وارد کنم و هرآینه در واقعیت شما جهت پرس‌وجو روی زمان کنونی، ناگزیر به استفاده از یک تابع برای تبدیل تقویم میلادی به خورشیدی هستیم. به نظر شما بهتر نیست دست به کار شویم و تابعی برای تبدیل تاریخ میلادی به خورشیدی بنویسیم؟

برای این‌کار پروژه‌ای را که در دو درس 1 ساختیم باز کنید و سپس روی نام پروژه در Solution Explorer راست‌کلیک کرده و Add New Item را انتخاب کنید.

 
محتویات فایل بازشده را حذف کنید و دستورهای زیر را جای‌گزین کنید:

  1. using System;  
  2. using System.Data;  
  3. using System.Data.SqlClient;  
  4. using System.Data.SqlTypes;  
  5. using Microsoft.SqlServer.Server;  
  6.   
  7. public partial class UserDefinedFunctions  
  8. {  
  9.     [Microsoft.SqlServer.Server.SqlFunction]  
  10.     public static JalaliDate GetCurrentDateTime()  
  11.     {  
  12.         System.Globalization.PersianCalendar pers = new System.Globalization.PersianCalendar();  
  13.         DateTime CurrentDate = DateTime.Now;  
  14.         JalaliDate jl;  
  15.         jl.Year = (Int16)pers.GetYear(CurrentDate);  
  16.         jl.Month = (byte)pers.GetMonth(CurrentDate);  
  17.         jl.Day = (byte)pers.GetDayOfMonth(CurrentDate);  
  18.         jl.Hour = (byte)pers.GetHour(CurrentDate);  
  19.         jl.Minute = (byte)pers.GetMinute(CurrentDate);  
  20.         jl.Second = (byte)pers.GetSecond(CurrentDate);  
  21.         return jl;  
  22.     }  
  23. }  

بار دیگر پروژه را به روشی که در درس یک آموزش داده شد؛ Publish کنید. اکنون می‌توانیم تاریخ و زمان کنونی را در متغیری از نوع JalaliDate وارد کنیم.

Declare @MyDate JalaliDate = dbo.GetCurrentDateTime() 

   یا به این شکل تاریخ و زمان جاری را مشاهده کنیم:

Select dbo.GetCurrentDateTime().ToString()


Viewing all articles
Browse latest Browse all 238

Trending Articles