为什么DateTime.ParseExact()不能在“4/4/2010 4:20:00 PM”使用“M'/'d'/'yyyy H'解析AM / PM:'mm':'ss'' TT”

时间:2010-04-08 01:21:08

标签: c# datetime parsing

我正在使用c#,如果我这样做

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy H':'mm':'ss' 'tt", null)

返回值总是凌晨4:20 - 使用tt我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:62)

将小时格式(H)设为小写,如下所示:

DateTime.ParseExact(
            "4/4/2010 4:20:00 PM", 
            "M/d/yyyy h:mm:ss tt", 
            CultureInfo.InvariantCulture);

大写“H”表示24小时时间,小写“h”表示12小时时间,并且将尊重候选字符串中的AM / PM。

旁注:最好为这样的方法提供IFormatProvider的实例(即使它只是CultureInfo.InvariantCulture)。这是在你遇到问题之前并不重要的事情之一,因此养成指定文化信息的习惯会很好。

答案 1 :(得分:3)

尝试以下方法:

Console.WriteLine(DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy h':'mm':'ss tt", null));

输出:

 4/4/2010 4:20:00 PM

答案 2 :(得分:2)

您需要在格式字符串中使用小写“h”作为小时参数。大写“H”代表24小时时间,因此“4”被识别为凌晨4点(因为“16”将是下午4点)。

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss:tt", null)