Convert Object to a DateTime
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&lt;DateTime?&gt;("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&lt;DateTime?&gt;("CreatedDate").GetValueOrDefault(DateTime.Now);
 var createdDate = row.Field&lt;DateTime?&gt;("CreatedDate") ?? DateTime.Now;