Convert Object to a DateTime

  • public static DateTime ObjectToDateTime(object o, DateTime defaultValue)
    if (o == null) return defaultValue;

    DateTime dt;
    if (DateTime.TryParse(o.ToString(), out dt))
    return dt;
    return defaultValue;

    The code feels too wordy and smells bad. Is there a better way?

    You could get rid of the "else" (because in the true case it has already returned), but that's not much of an improvement. Other than that, this looks pretty optimal (clarity-wise) to me.

    return o as DateTime ?? defaultValue;

    `DateTime` is a value type and thus could not be used with the `as` operator nor set to `null`. That would be invalid code.

    As @Jeff Mercado says, you cannot use a DateTime object with the `as` keyword. A failed conversion cannot be set to null. However, if you use a `DateTime?` (nullable DateTime) instead, your code would work.

  • On the offhand chance that your object is already a DateTime, you're performing unnecessary conversions to and from strings.

     if (o is DateTime)
    return (DateTime)o;

    This also strikes me as something you might be doing for a database item, for example. In which case, I'd encourage you to know and trust your data types and then use existing methods of retrieval.

    For example, if you have a DataTable with a column CreatedDate, you should know it's a date, what you might not know is if it has a value if the column is nullable at the database. That's fine, you can handle that in code.

     var createdDate = row.Field<DateTime?>("CreatedDate"); 

    There we go, a DateTime?, no coding of a conversion necessary. You can even specify a default and type if to DateTime

     var createdDate = row.Field<DateTime?>("CreatedDate").GetValueOrDefault(DateTime.Now);
    var createdDate = row.Field<DateTime?>("CreatedDate") ?? DateTime.Now;

License under CC-BY-SA with attribution

Content dated before 7/24/2021 11:53 AM