I am aware of the standard procedure for displaying a DateTime
in a custom format, like so:
MessageBox.Show(dateSent.ToString("dd/MM/yyyy hh:mm:ss"));
However, when I change the variable from a DateTime
to a DateTime?
to accept null values, I lose the definition for the ToString(string)
overload. I need to use DateTime?
as I am reading from a database which potentially has null values - if the field in the database has a null value, then I need to assign the variable a null value too.
So I have two questions:
1) Out of curiosity, does anyone know if there is a reason why DateTime?
does not contain an overload for ToString(string)
?
2) Could anyone suggest an alternative method for what I am trying to achieve?
DateTime?
is syntactic sugar for Nullable<DateTime>
and that's why it don't have ToString(format)
overload.
However, you can access underlying DateTime
struct using Value
property. But before that use HasValue
to check, if the value exists.
MessageBox.Show(dateSent.HasValue ? dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") : string.Empty)
Instead of having to manually perform a null check every time, you can write an extension method.
public static string ToStringFormat(this DateTime? dt, string format)
{
if(dt.HasValue)
return dt.Value.ToString(format);
else
return "";
}
And use it like this (with whatever string format you want)
Console.WriteLine(myNullableDateTime.ToStringFormat("dd/MM/yyyy hh:mm:ss"));
You can still use
variableName.Value.ToString(customFormat);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With