根据规则集验证日期

时间:2013-03-06 15:55:31

标签: c# sql validation date

我正在编写一个应用程序,需要根据一组规则限制下达订单的时间。我有两个问题,将规则存储在MSSQL表中的最佳方法是什么,以及验证Date对抗它们的最佳方法是什么?

例如。

  • 订单不能放置在1200至1700之间的任何星期六。
  • 订单不能放置在0000至2359之间的任何圣诞节(25/12)
  • 订单无法在2013年10月3日在1500和1600之间放置。

我原来的计划是让一个表有4列,(开始时间,结束时间,单一规则/经常性规则)。

但是,我不知道如何考虑星期几与年份日期对绝对日期。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我解决这个问题的方法是有3个表(一年中的一天,一周中的一天和绝对日期),它覆盖DateConstraint,其中包含每个规则的开始/结束时间。

entity framework diagram for time matching

验证码相对简单。我在所有类中添加了Matches()例程。

public partial class DateConstraint
{
    public virtual bool Matches()
    {
        return DateTime.Now.TimeOfDay.Ticks >= StartTime.Ticks && DateTime.Now.TimeOfDay.Ticks <= EndTime.Ticks;
    }
}

public partial class DayOfWeekConstraint : DateConstraint
{
    public override bool Matches()
    {
        return base.Matches() && this.DayOfWeek == Convert.ToInt16(DateTime.Now.DayOfWeek);
    }
}

public partial class DayOfYearConstraint : DateConstraint
{
    public override bool Matches()
    {
        return base.Matches() && Date.Day == DateTime.Now.Day && Date.Month == DateTime.Now.Month;
    }
}

public partial class AbsoluteDateConstraint : DateConstraint
{
    public override bool Matches()
    {

        return base.Matches() && Date.Day == DateTime.Now.Day && Date.Month == DateTime.Now.Month && Date.Year == DateTime.Now.Year;
    }
}

要进行验证,我只需

foreach(var dateConstraint in Restaurant.DateConstraints)
{
   if(!dateConstraint.Matches()) { return false; }
}