MM
is for 01
to 12
Use M
instead which is for 1
to 12
.
string timestr = "1/20/2014 12:05:16 AM";
var date = DateTime.ParseExact(timestr,
"M/dd/yyyy hh:mm:ss tt",
CultureInfo.InvariantCulture);
Console.WriteLine(date);
Output will be;
1/20/2014 12:05:16 AM
Here a demonstration
.
For more information, take a look at;
Also be careful about your hour formatting. hh
is for 01
to 12
, HH
is for 00
to 23
. If your hour will be 13
, 14
or 15
etc.. hh
format will fail.
And since you using null
as a IFormatProvider
in your DateTime.ParseExact
method, that means it uses CurrentCulture
by default. And if it's DateSeparator
is not /
, your method throws FormatException
even your string and format matches exactly because "/"
format specifier has a special meaning in custom date and time formats like; replace me current culture's or suplied culture date separator