There are various academic papers on ways to represent approximate time,
e.g. http://www.musiccog.ohio-state.edu/Humdrum/representations/date.rep.html
If you want to handle the full scope of historical documents and the approximate knowledge you'll have for any of them it's not a simple bool / nullable operation with DateTime values.
I haven't seen a C# library to handle this yet. My own Natural Language Engine for C# can understand all kinds of date time phrases but was designed for a different problem - it can accept an imprecise question and query a database of exact values.
It has classes for a specific date, a range of dates, a known year (but no month/day), a known year+month (but no date), a half-infinite range (e.g. before or after a given date), ... and using these it can construct queries against databases or can enumerate all the possible ranges of dates that could be meant. e.g. you can ask it "who called last year on friday after 4pm" and it can generate the appropriate SQL query.
If you want to do this right it's not easy! If I were you, I would capture a string value with the original text in it alongside whatever representation you chose to use for the DateTime values. That way you can make the representation smarter over time to cover more cases, ultimately being able to handle something like "sometime between 1940 and September 16th 1945.
Initially you might want to store just the string representation and two DateTime values - earliest possible and latest possible date. That covers a majority of the cases you will see and it's really easy to query against. You can leave either Datetime value null or perhaps set it to maximum or minimum value to represent half-infinite ranges like "after 1900".