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