کار با تاریخ شمسی وساعت (استفاده از توابع )
دنبال یه روش کامل و تست شد برای کار با تاریخ و ساعت شمسی هستم
در حال حاضر نوع فیلد های تاریخ رو به صورت nvarchar(20) توو sql ذخیره میکنم
الان میخوام بدونم اگه بخوام روی فیلد های تاریخ محاسبات انجام بدم چیکار کنم
- اختلاف دو تا تاریخ
- اضافه کردن روز و ساعت به یک تاریخ
- جمع ساعت ها و...
قبلا یه جدول ایجاد کرده بودم وتارخ های شمسی و میلادی ذخیره کرده بودم و باهاشون کار میکردم
یه زمانی هم از نوع داده datetime2(7) استفاده کردم که خطا زیاد داشت و بیخیالش شدم
روشی که شما استفاده کردید هم روش بدی نیست. ولی مشکلی که داره این هست که بسیاری از امکانات DateTime مثل توابع DateTime.Add یا DateTime.Diff رو نداره.
میتونید یک ستون دیگه هم از نوع datetime اضافه کنید و برای نمایش تاریخ از ستون string استفاده کنید و اگر احیانا در قسمتی از پروژه نیاز داشتید که دو تابع رو مقایسه کنید از فیلد datetime استفاده کنید.
البته میتونید کلا از نوع datetime استفاده کنید ولی در این صورت برای نمایش تاریخ شمسی باید از توابع تبدیل تاریخ شمسی به میلادی و برعکس استفاده کنید.
تابع تبدیل تاریخ میلادی به شمسی
public static string DateShamsi()
{
var currentDate = DateTime.Now;
PersianCalendar pcCalender = new PersianCalendar();
int year = pcCalender.GetYear(currentDate);
int month = pcCalender.GetMonth(currentDate);
int day = pcCalender.GetDayOfMonth(currentDate);
string shamsiDate = string.Format("{0:yyyy/MM/dd}", Convert.ToDateTime(year + "/" + month + "/" + day));
return shamsiDate;
}
بهترین روش ذخیره همون DateTime2 هست که مقایسه رو به شدت آسون میکنه و کار باهاش خیلی راحت میشه
فقط توجه کن موقع ذخیره باید میلادی ذخیره بشه و موقع دریافت هم باید با توابع به شمسی تبدیلش کنی .
و توجه کن که تاریخ سیستم هم باید میلادی باشه.
من خودم قبلا از string استفاده میکردم و اصلا خوب نبود ولی با این روش کلی کارم راحت تر شده
فقط اگه خواستی بصورت کد فرست دیتابیس رو درست کنی باید فیلد های تاریخ رو به صورت زیر تعریف کنی:
[Column(TypeName = "datetime2")]
public Nullable<DateTime> dateTime { get; set; }
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- حذف کامل یک رکورد در جدول ریلیشن شده
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf