private bool GenDateMightBeAfterDate(GenDate gen, DateTime date, bool fAD)
{
if (gen.IsAD && !fAD) // AD > BC
return true;
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 true;
}
if (gen.IsAD && fAD) // Both AD
{
if (gen.Year < date.Year)
return gen.Precision == GenDate.PrecisionType.After;
else if (gen.Year > date.Year)
return true;
}
if (gen.Month < date.Month)
{
return gen.Month == GenDate.UnknownMonth &&
gen.Precision != GenDate.PrecisionType.Before;
}
else if (gen.Month > date.Month)
{
return true;
}
if (gen.Day == GenDate.UnknownDay)
return gen.Precision != GenDate.PrecisionType.Before;
else if (gen.Day == date.Day)
return gen.Precision != GenDate.PrecisionType.Before;
else
return gen.Day > date.Day || gen.Precision == GenDate.PrecisionType.After;
}