If your Nullable has no value (HasValue is false) it is an invalid operation to request its Value, and if your code uses your nullable's .Value directly without checking it first you can probably skip using nullables! :)
The idea behind Nullable is to help deal with a situation of having something that cannot be null, and then needing a way to make it nullable because it's "unavoidable" but you then need to check, for every situation you use it, whether it has a value or not and act appropriately
If you want to have a nullable that might or might not have a value, and you want to blind call something on it and know you have a value, then you need something like:
item.Startdate.GetValueOrDefault(DateTime.MinValue).ToString("d")
You have to make a decision as to what value to use if there is no current value. You can shortcut things by using the null propagator against the nullable:
item.Startdate?.ToString("d")
If the nullable has no value this whole thing evaluates to null. If it has a value, it evaluates to a DateTime (or whatever type is in the nullable) that is then ToString'd. You can only really use this in contexts that will tolerate null, such as setting a textbox's text
As it evaluates to null it can be null coalesce'd too:
item.Startdate?.ToString("d") ?? DateTime.MinValue.ToString("d")
The shorter variation of this being to coalesce the nullable datetime with an actual datetime, then tostring the result:
(item.Startdate ?? DateTime.MinValue).ToString("d")
This last form works like the GetValueOfDefault variation earlier, it's just the ?? wasn't a thing until recently; GVOD() is much older