سلام. پروژه من از نوع Desktop و زبان برنامه برنامه نویسی سی شارپ هست. تاریخ ها رو توی پروژه خودم از نوع شمسی و به صورت رشته ای ذخیره کردم. حالا چجوری میتونم در سی شارپ بین 2 تاریخ شمسی مقایسه انجام بدم و تشخیص بدم کدوم بزرگتر هست ؟
select * from Table where (date > '1398/09/10' )
به جای تاریخ استاتیک که من گذاشتم، میتونید متغییر یا کنترلر خودتون رو قرار بدید.
پست قبل رو نتونستم ویرایش کنم. اون کد رکورد های بعد از تاریخ مشخص شده رو نشون میده.
از کد زیر برای مقایسه دو تاریخ از نوع استرینگ میتونید استفاده کنید:
select * from Table where (date BETWEEN @StartDate AND @EndDate)
سلام. تابع زیر را در بدنه فرم یا پروژه خود قرار دهید.
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);
یه نکته دیگه هم در مورد کار با تاریخ شمسی در سی شارپ وجود داره . سعی کنید تاریخ هاتون رو با فرمت زیر در دیتابیس ذخیره کنید
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 در سی شارپ اطلاعات بیشتری رو کسب کنید.
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1160
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
597
- پاسخ :
1
|
تاریخ :
1403/07/13
- ساعت :
12:06:00 PM
- بازدید :
349
- پاسخ :
1
|
تاریخ :
1403/06/24
- ساعت :
08:52:00 PM
- بازدید :
318
- پاسخ :
1
|
تاریخ :
1398/09/14
- ساعت :
01:58:00 PM
- بازدید :
4269
- پاسخ :
1
|
تاریخ :
1403/05/16
- ساعت :
05:43:00 AM
- بازدید :
662
- پاسخ :
0
|
تاریخ :
1398/09/05
- ساعت :
06:04:00 PM
- بازدید :
3172
- پاسخ :
2
|
تاریخ :
1398/09/08
- ساعت :
11:38:00 PM
- بازدید :
3251
- پاسخ :
1
|
تاریخ :
1403/04/12
- ساعت :
07:27:00 PM
- بازدید :
658
- پاسخ :
0
|
تاریخ :
1403/01/29
- ساعت :
08:08:00 AM
- بازدید :
688
- پاسخ :
4
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2011
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
76
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
109
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1033
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
429
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4798
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1160
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
597
- پاسخ :
1
|