private bool GenDateIsBeforeDate(GenDate gen, DateTime date, bool fAD)
{
if (UnspecificMatching)
return GenDateMightBeBeforeDate(gen, date, fAD);
if (gen.IsAD && !fAD) // AD > BC
return false;
if (!gen.IsAD && fAD) // BC < AD
return gen.Precision != GenDate.PrecisionType.After;
if (!gen.IsAD && !fAD) // Both BC
{
if (gen.Year > date.Year)
return gen.Precision != GenDate.PrecisionType.After;
else if (gen.Year < date.Year)
return false;
}
if (gen.IsAD && fAD) // Both AD
{
if (gen.Year < date.Year)
return gen.Precision != GenDate.PrecisionType.After;
else if (gen.Year > date.Year)
return false;
}
if (gen.Month < date.Month)
{
return gen.Month != GenDate.UnknownMonth ||
gen.Precision == GenDate.PrecisionType.Before;
}
else if (gen.Month > date.Month)
{
return false;
}
if (gen.Day == GenDate.UnknownDay)
return gen.Precision == GenDate.PrecisionType.Before;
return gen.Day <= date.Day && gen.Precision != GenDate.PrecisionType.After;
}