دسته بندی ها
21:35 1398/09/14

مقایسه بین دو تاریخ شمسی ذخیره شده با فیلد varchar در سی شارپ

مشخصات سوال کننده :
کاربر : mobile_app     امتیاز کاربر : 18     رتبه کاربر : 40
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 9119
پاسخ دهنده : mohammad-i 11:37 1398/09/15
select * from Table where (date > '1398/09/10' )

به جای تاریخ استاتیک که من گذاشتم، میتونید متغییر یا کنترلر خودتون رو قرار بدید.

به این پاسخ امتیاز بدهید    1
امتیاز: 260 رتبه: 7
پاسخ دهنده : mohammad-i 11:44 1398/09/15

پست قبل رو نتونستم ویرایش کنم. اون کد رکورد های بعد از تاریخ مشخص شده رو نشون میده.

از کد زیر برای مقایسه دو تاریخ از نوع استرینگ میتونید استفاده کنید:

select * from Table where (date BETWEEN @StartDate AND @EndDate)

 

به این پاسخ امتیاز بدهید    1
امتیاز: 260 رتبه: 7
پاسخ دهنده : Sowgandi 11:47 1398/09/15

سلام. تابع زیر را در بدنه فرم یا پروژه خود قرار دهید.

   public int GetPersianDaysDiffDate(string Date1, string Date2)
        {
            int year1 = Convert.ToInt16(Date1.Substring(0, 4));
            int month1 = Convert.ToInt16(Date1.Substring(5, 2));
            int day1 = Convert.ToInt16(Date1.Substring(8, 2));

            int year2 = Convert.ToInt16(Date2.Substring(0, 4));
            int month2 = Convert.ToInt16(Date2.Substring(5, 2));
            int day2 = Convert.ToInt16(Date2.Substring(8, 2));

            System.Globalization.PersianCalendar calendar = new System.Globalization.PersianCalendar();
            DateTime dt1 = calendar.ToDateTime(year1, month1, day1, 0, 0, 0, 0);
            DateTime dt2 = calendar.ToDateTime(year2, month2, day2, 0, 0, 0, 0);
            TimeSpan ts = dt2.Subtract(dt1);

            return ts.Days;
        }

این تابع دو ورودی Date1 و Date2 دارد. خروجی این تابع از نوع int است و اختلاف روزهای دو تاریخ رو به شما برمیگردونه. حالا اگر این مقدار برابر صفر بود یعنی دو تاریخ با هم برابره، اگه بزرگتر از صفر بود یعنی Date2 بزرگتر از Date1 هست و اگر منفی بود برعکس. از این تابع به شکل زیر استفاده کنید.

string Date1 = "1398/01/01";
string Date2 = "1398/01/05";

int Diff = GetPersianDaysDiffDate(Date1 , Date2);

 

به این پاسخ امتیاز بدهید    3
امتیاز: 871 رتبه: 3
پاسخ دهنده : pedram_khan 15:01 1398/09/15

یه نکته دیگه هم در مورد کار با تاریخ شمسی در سی شارپ وجود داره . سعی کنید تاریخ هاتون رو با فرمت زیر در دیتابیس ذخیره کنید

1398/05/08

اگر این فرمت رو رعایت کنید مطمین خواهید بود که رشته تاریخ شما همیشه 10 کاراکتر هست. اما اگر این فرمت رعایت نشه حالات زیر ممکنه پیش بیاد

1398/5/15

1398/2/3

و البته خیلی حالا دیگه که این باعث میشه رشته شما کمتر از 10 کاراکتر بشه گاهی و مقایسه بین تاریخ ها رو سخت میکنه.

البته من خودم توی پروژه هام همیشه سعی میکنم هم تاریخ شمسی رو به صورت Varchar توی دیتابیس ذخیره کنم و هم تاریخ میلادی رو به صورت DateTime داشته باشم چون برای خیلی عملیات مثل محاسبه اختلاف دو تاریخ در سی شارپ با تاریخ میلادی کار کردن خیلی ساده تر هست.

 

اما برای اینکه بتونید فرمت بالا رو رعایت کنید باید از دستور زیر استفاده کنید

 

string.Format("{0:yyyy/MM/dd}", Convert.ToDateTime("1398/5/12"));

 

توی این لینک میتونید در مورد Format در سی شارپ اطلاعات بیشتری رو کسب کنید.

ویرایش شده در جمعه 15 آذر 1398 ساعت 15:06:34
به این پاسخ امتیاز بدهید    1
امتیاز: 277 رتبه: 6
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود