Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No DateTime?.ToString(string) overload?

Tags:

c#

datetime

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?

like image 413
Mike Baxter Avatar asked Apr 04 '13 10:04

Mike Baxter


3 Answers

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)
like image 79
MarcinJuraszek Avatar answered Oct 26 '22 13:10

MarcinJuraszek


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"));
like image 7
keyboardP Avatar answered Oct 26 '22 12:10

keyboardP


You can still use

variableName.Value.ToString(customFormat);
like image 1
GLlompart Avatar answered Oct 26 '22 13:10

GLlompart