Hay varios artículos académicos sobre formas de representar la hora aproximada, por ejemplo, http://www.musiccog.ohio-state.edu/Humdrum/representations/date.rep.html
Si desea manejar el alcance completo de los documentos históricos y el conocimiento aproximado que tendrá para cualquiera de ellos, no es una simple operación bool/nullable con valores DateTime.
No he visto una biblioteca C# para manejar esto todavía. Mi propio motor de lenguaje natural para C# puede comprender todo tipo de frases de fecha y hora, pero fue diseñado para un problema diferente: puede aceptar una pregunta imprecisa y consultar una base de datos de valores exactos.
Tiene clases para una fecha específica, un rango de fechas, un año conocido (pero no un mes/día), un año + mes conocido (pero ninguna fecha), un rango medio infinito (por ejemplo, antes o después de fecha dada), ... y al usarlos puede construir consultas contra bases de datos o puede enumerar todos los posibles rangos de fechas que podrían significar. p.ej. puede preguntar "quién llamó el año pasado el viernes después de las 4 p.m." y puede generar la consulta SQL adecuada.
¡Si quiere hacer esto bien, no es fácil! Si yo fuera usted, capturaría un valor de cadena con el texto original junto con la representación que eligiera para los valores de DateTime. De esta forma, puede hacer que la representación sea más inteligente a lo largo del tiempo para abarcar más casos; en última instancia, puede manejar algo como "entre 1940 y el 16 de septiembre de 1945.
Inicialmente es posible que desee almacenar solo la representación de cadena y dos valores de DateTime: lo más pronto posible y la última fecha posible. Eso cubre la mayoría de los casos que verá y es muy fácil consultar en contra. Puede dejar el valor de Datetime nulo o quizás establecerlo en un valor máximo o mínimo para representar rangos medios infinitos como "after 1900 ".
Las fechas inciertas están codificadas en cualquier plataforma que use eHarmony. –