تبدیل تاریخ میلادی به هجری شمسی با استفاده از کدنویسی C#
شرح صورت مسئله
در موارد مختلفی ممکن است درج و یا نمایش تاریخ به هجری شمسی موردنیاز باشد. برای مثال هنگامی که بخواهیم تاریخچه کامنتهای رد و بدل شده میان مدیر و کارشناس طی فرآیند بررسی و تایید یک درخواست را نگهداری کرده و نمایش دهیم (شرح کامل این مسئله به صورت جداگانه ارائه خواهد شد). یا در سایر مواردی که بخواهیم صرفاً با استفاده از کدنویسی مقدار یک فیلد تاریخ را از میلادی به هجری شمسی تبدیل نماییم. در ادامه این مستند، کد موردنیاز جهت این تبدیل را با هم بررسی میکنیم.
* توجه 1: تمام مقادیر دادهای از نوع زمان و تاریخ در پایگاه داده به صورت میلادی ذخیرهسازی میشوند.
- ابتدا باید فضای نام Globalization را به کد خود اضافه کنیم:
using System.Globalization;
- سپس داخل کد، یک متد جدید با نام PersianDate به صورت زیر تعریف میکنیم:
public string PersianDate(DateTime DateTime1)
{
PersianCalendar PersianCalendar1 = new PersianCalendar();
return string.Format(@”{0}/{1}/{2} ({3}:{4})”,
PersianCalendar1.GetYear(DateTime1),
PersianCalendar1.GetMonth(DateTime1),
PersianCalendar1.GetDayOfMonth(DateTime1),
PersianCalendar1.GetHour(DateTime1),
PersianCalendar1.GetMinute(DateTime1));
}
* توجه 2: در صورتی که داخل Script Task کدنویسی میکنیم باید متد PersianDate مستقیماً داخل محدودهی کلاس public class ScriptTask : IScriptTask تعریف شود. با این کار، از داخل متد (Execute) میتوانیم به متد PersianDate دسترسی داشته باشیم.
اما در صورتی که قصد داریم روی یکی از خروجیهای Gateway کدنویسی کنیم باید متد PersianDate را مستقیماً داخل محدودهی کلاس public class ConditionalFlow : IConditionalFlow تعریف نماییم. با این کار، از داخل متد (Evaluate) میتوانیم به متد PersianDate دسترسی داشته باشیم.
- سپس داخل متد Execute از کدهای زیر را جهت دریافت مقدار تاریخ میلادی، تبدیل به تاریخ شمسی و نهایتاً ذخیرهسازی آن در یک متغیر خروجی استفاده میکنیم:
DateTime AD_Date = Execution.DateTimeValue(“AD_Date”);// تاریخ میلادی
Execution.SetVariable(“PersianDate1”, PersianDate(AD_Date));// تبدیل به تاریخ هجری شمسی و ذخیرهسازی آن
شرح صورت مسئله
در برخی موارد ممکن است تبدیل تاریخ میلادی به هجری شمسی داخل Queryهای پایگاه داده موردنیاز باشد. برای مثال هنگام ساخت گزارش برای فرآیندهایی که دارای فیلد اطلاعاتی از نوع تاریخ هستند. در ادامه این مستند نحوه تبدیل تاریخ میلادی به هجری شمسی با استفاده از تابع dbo.com_udfGetSolarDate تعریف شده در پایگاه داده Didgah_Common را با هم بررسی میکنیم.
* توجه 1: تابع Didgah_Common.dbo.com_udfGetSolarDate یک پارامتر ورودی از نوع datetime یا smalldatetime را دریافت کرده و یک مقدار خروجی از نوع VARCHAR(10) را به عنوان خروجی به ما میدهد.
سناریوی 1: دریافت مجموعهای از رکوردها از پایگاه داده که شامل فیلد اطلاعاتی از نوع تاریخ است.
در این سناریو قصد داریم اطلاعات یک جدول از پایگاه داده که دارای فیلد تاریخ درخواست (RequestDate) است را فراخوانی کرده و ستون تاریخ به صورت هجری شمسی نمایش داده شود.
SELECT [Id]
,[RequestCode]
,Didgah_Common.dbo.com_udfGetSolarDate([RequestDate]) as [RequestDate (Hejri Shamsi)]
,[CodeMelli]
,[FullName]
,[FatherName]
,[BirthDate]
,[BirthPlace]
FROM [Didgah_BPMS].[dbo].[bpm_XTable_Extra]
* توجه 2: در query فوق نام جدول مورد نظر خود را جایگزین [dbo].[bpm_ XTable_Extra] نمایید.
خروجی سناریوی 1:
سناریوی 2: تبدیل فیلد دادهای از نوع تاریخ میلادی به هجری شمسی داخل کدنویسیهای پایگاه داده (T-SQL)
در این سناریو نحوه تبدیل تاریخ میلادی به هجری شمسی با استفاده از کدنویسی پایگاه داده را بررسی میکنیم.
declare @MDate smalldatetime — تعریف متغییر از نوع تاریخ
declare @HDate varchar(16) — تعریف متغییر از نوع رشته 16 کاراکتری
— دریافت مقدار یک فیلد از نوع تاریخ میلادی
select @MDate= RequestDate from Didgah_BPMS.dbo.bpm_PazireshMadadjoo_Extra where id=1;
— تبدیل فیلد تاریخ به هجری شمسی
SELECT @HDate= Didgah_Common.dbo.com_udfGetSolarDate(@MDate);
— نمایش مقادیر تاریخ موردنظر بصورت میلادی و هجری شمسی
select @MDate as [Miladi Date],@HDate as [Hejri Shamsi Date]
خروجی سناریوی 2:
|
شرح صورت مسئله
در برخی موارد ممکن است تبدیل تاریخ میلادی به تاریخ و ساعت هجری شمسی داخل Queryهای پایگاه داده موردنیاز باشد. برای مثال هنگام ساخت گزارش برای فرآیندهایی که دارای فید اطلاعاتی از نوع تاریخ و ساعت هستند. در ادامه این مستند نحوه تبدیل تاریخ میلادی به هجری شمسی (همراه با ساعت) با استفاده از تابع dbo.com_com_udfGetSolarDateTime تعریف شده در پایگاه داده Didgah_Common را با هم بررسی میکنیم.
* توجه 1: تابع Didgah_Common.dbo.com_com_udfGetSolarDateTime یک پارامتر ورودی از نوع datetime یا smalldatetime را دریافت کرده و یک مقدار خروجی از نوع رشته VARCHAR(16) را به عنوان خروجی به ما میدهد.
سناریوی 1: دریافت مجموعهای از رکوردها از پایگاه داده که شامل فیلد اطلاعاتی از نوع تاریخ و ساعت است.
در این سناریو قصد داریم اطلاعات یک جدول از پایگاه داده که دارای فیلد تاریخ درخواست (RequestDate) دارد، فراخوانی کرده و ستون تاریخ و ساعت به صورت هجری شمسی نمایش داده شود.
SELECT [Id]
,[RequestCode]
,Didgah_Common.dbo.com_com_udfGetSolarDateTime ([RequestDate]) as [RequestDate (Hejri Shamsi)]
,[CodeMelli]
,[FullName]
,[FatherName]
,[BirthDate]
,[BirthPlace]
FROM [Didgah_BPMS].[dbo].[bpm_XTable_Extra]
* توجه 2: در query فوق نام جدول مورد نظر خود را جایگزین [dbo].[bpm_ XTable_Extra] نمایید.
خروجی سناریوی 1:
سناریوی 2: تبدیل فیلد دادهای از نوع تاریخ میلادی به هجری شمسی (به همراه ساعت) داخل کدنویسیهای پایگاه داده (T-SQL)
در این سناریو نحوه تبدیل تاریخ میلادی به تاریخ و ساعت هجری شمسی با استفاده از کدنویسی پایگاه داده را بررسی میکنیم.
declare @MDate smalldatetime — تعریف متغیر از نوع تاریخ
declare @HDate2 varchar(16) — تعریف متغیر از نوع رشته 16 کاراکتری
— دریافت مقدار یک فیلد از نوع تاریخ میلادی
select @MDate= RequestDate from Didgah_BPMS.dbo.bpm_PazireshMadadjoo_Extra where id=1;
— تبدیل فیلد تاریخ به تاریخ و ساعت هجری شمسی
SELECT @HDate2= Didgah_Common.dbo.com_udfGetSolarDateTime(@MDate);
— نمایش مقادیر تاریخ و ساعت موردنظر به صورت میلادی و هجری شمسی
select @MDate as [تاریخ میلادی],@HDate2 as [تاریخ و ساعت هجری شمسی]
خروجی سناریوی 2: