如何比较两个波斯日期,找出哪一个更大
本文关键字:日期 哪一个 两个 何比较 比较 | 更新日期: 2023-09-27 18:23:46
我想比较两个波斯日期,找出哪个更大,我使用这个函数:
public static List<MatchDrawHistory> GetAllMatchDrawHistory(string startDate, string endDate)
{
using (var db= new ReceiveSendEntitiesV5())
{
var matchDrawList = db.MatchDrawHistories.Where(x => String.CompareOrdinal(x.DrawStartDate,startDate)>=0 && String.CompareOrdinal(x.DrawEndDate , endDate) <=0).ToList();
return matchDrawList;
}
}
但它不起作用,我该怎么做?
编辑:DrawStartDate
和DrawStartDate
是DataBase
中的nvarchar(20)
,它们是波斯日期,而不是公历日期
首先需要将string
日期转换为DateTime
。假设您的字符串日期为yyyy/MM/dd,则转换函数如下所示:
private static DateTime ParseDate(string date)
{
var pc = new PersianCalendar();
string[] arrDate = date.Split("/");
return pc.ToDateTime(Int32.Parse(arrDate[0]), Int32.Parse(arrDate[1]),
Int32.Parse(arrDate[2]), 0, 0, 0, 0);
}
现在您可以使用以下方法来比较两个日期:
private static bool Compare(DateTime firstDate, DateTime secondDate)
{
return firstDate >= secondDate;
}
您的问题是试图将日期存储为字符串。我假设你班上的日期是字符串,所以我会传入DateTime,并使用如下内容:
var matchDrawList = db.MatchDrawHistories.Where(x => DateTime.Parse(x.DrawStartDate) >= startDate && DateTime.Parse(x.DrawEndDate) <= endDate).ToList();
如果您不确定字符串是否能正确解析为日期,则可以创建一个函数来包装TryParse
,具体取决于您的业务逻辑,这可能更可取,因为如果某个字符串的日期无效,您可能仍然想要其他结果。
static bool CheckDateGreater(string date1, string date2)
{
DateTime dt1;
if (!DateTime.TryParse(date1, out dt) return false;
DateTime dt2;
if (!DateTime.TryParse(date2, out dt) return false;
return (dt1 >= dt2);
}
然后呼叫:
var matchDrawList = db.MatchDrawHistories.Where(x => CheckDateGreater(x.DrawStartDate, startDate) && CheckDateGreater(endDate, x.DrawEndDate).ToList();
编辑:
刚刚看到你对波斯约会的评论。您需要使用PersianCalendar类。这应该会返回一个DateTime对象。
使用DateTime
而不是string
进行比较
var start = DateTime.Parse(startDate);
var end = DateTime.Parse(endDate);
...
db.MatchDrawHistories.Where(x => x.DrawStartDate >= start && x.DrawEndDate <= end)
使用CompareTo方法,如下代码所示:if(endDate.CompleteTo(startDate)<0)//startDate大于