I have some code that I want to test for a valid time and for some reason it works for dates with PM's but not AM.
So I'm taking in formats that correspond to this format:
6/1/2018 12:00:00 PM
However for some reason or another this is working great when it's PM but when I replace it with AM it breaks. The format in acceptableformats I'm accepting it to hit is:
M/d/yyyy HH:mm:ss tt
The below fails saying that it's false:
DateTimeOffset dateTimeResult;
var acceptableFormats = new string[] {
"yyyy-MM-dd'T'HH:mm:ss.FFFK",
"M/d/yyyy HH:mm:ss",
"MM/dd/yyyy HH:mm:ss",
"M/d/yyyy HH:mm:ss tt",
"MM/dd/yyyy HH:mm:ss tt",
"yyyy-MM-dd' 'HH:mm:ss.FFFK",
"yyyy-MM-dd'T'HH:mm:ssK",
"yyyy-MM-dd' 'HH:mm:ssK",
"yyyy-MM-dd'T'HH:mm:ss",
"yyyy-MM-dd' 'HH:mm:ss",
"yyyy-MM-dd'T'HH:mm",
"yyyy-MM-dd' 'HH:mm",
"yyyy-MM-dd'T'HH",
"yyyy-MM-dd' 'HH",
"yyyy-MM-dd",
"yyyy-MM-dd",
"yyyyMMdd",
"MM/dd/yyyy",
"M/d/yyyy",
"yyyy-MM",
"yyyy" };
DateTimeOffset dateTimeResult;
var timeOffset = DateTimeOffset.TryParseExact("6/1/2018 12:00:00 AM", acceptableFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTimeResult);
This works says it's true:
DateTimeOffset dateTimeResult;
var acceptableFormats = new string[] {
"yyyy-MM-dd'T'HH:mm:ss.FFFK",
"M/d/yyyy HH:mm:ss",
"MM/dd/yyyy HH:mm:ss",
"M/d/yyyy HH:mm:ss tt",
"MM/dd/yyyy HH:mm:ss tt",
"yyyy-MM-dd' 'HH:mm:ss.FFFK",
"yyyy-MM-dd'T'HH:mm:ssK",
"yyyy-MM-dd' 'HH:mm:ssK",
"yyyy-MM-dd'T'HH:mm:ss",
"yyyy-MM-dd' 'HH:mm:ss",
"yyyy-MM-dd'T'HH:mm",
"yyyy-MM-dd' 'HH:mm",
"yyyy-MM-dd'T'HH",
"yyyy-MM-dd' 'HH",
"yyyy-MM-dd",
"yyyy-MM-dd",
"yyyyMMdd",
"MM/dd/yyyy",
"M/d/yyyy",
"yyyy-MM",
"yyyy" };
DateTimeOffset dateTimeResult;
var timeOffset = DateTimeOffset.TryParseExact("6/1/2018 12:00:00 PM", acceptableFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTimeResult);
The reason you have this problem is because your format is asking for a 24-hour hour component. 12, in 24-hour time, ALWAYS means "noon". You can't have "noon AM" because AM is only for times between midnight and noon (exclusive).
This line throws an exception because of an invalid input format:
DateTimeOffset.ParseExact("6/1/2018 12:00:00 AM", "M/d/yyyy HH:mm:ss tt",
CultureInfo.InvariantCulture)
If I change HH to hh, then it works:
DateTimeOffset.ParseExact("6/1/2018 12:00:00 AM", "M/d/yyyy hh:mm:ss tt",
CultureInfo.InvariantCulture)
// returns a valid DateTimeOffset object, which in
// my culture is displayed as '6/1/2018 12:00:00 AM -04:00'
// (I happen to be in -4 UTC)
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