如何转换为时间?

时间:2015-05-29 06:36:59

标签: c# .net datetime

我正在尝试从字符串转换为时间 我的字符串就像这个“上午11:45”或“03:19 PM”,我正在使用

   <RichTextBlock>
        <common:Properties.Html>
            <![CDATA[ <img width="100" height = "100" src="https://www.google.com/images/srpr/logo11w.png"/> ]]>
        </common:Properties.Html>
    </RichTextBlock>

然后它会被转换但是当我通过时

dateTime = DateTime.ParseExact("11:45 AM", "H:mm tt",
                                System.Globalization.CultureInfo.InvariantCulture);

将错误视为

  

字符串未被识别为有效的DateTime。

我无法理解为什么会发生任何人的想法然后请帮助我

4 个答案:

答案 0 :(得分:4)

我会使用h代替HH适用于24小时格式,h适用于12小时格式。

DateTime.ParseExact("9:45 PM", "h:mm tt", System.Globalization.CultureInfo.InvariantCulture)

请参阅格式选项的完整列表here

答案 1 :(得分:3)

由于您要解析12小时格式并将其转换为24小时格式,您可以使用此

string dt = DateTime.ParseExact("3:19 PM", "h:mm tt",CultureInfo.InvariantCulture).ToString("HH:mm");;

答案 2 :(得分:1)

不幸的是,没有一个答案完全正确。

Ante meridiem和post meridiem属于12-hour clock格式。这就是为什么如果您的字符串包含其中一个,永远不会使用24-hour clock格式说明符的原因。

这就是为什么您需要使用hhh说明符, HHH的原因。由于您的小时部分可以使用前导零,因此使用hh specifier是两种字符串类型的最佳选择。

使用hh:mm tt格式将成功解析字符串。

string s = "03:19 PM";
DateTime dt;
if(DateTime.TryParseExact(s, "hh:mm tt", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    dt.Dump(); // 29.05.2015 15:19:00
}

string s = "11:45 AM";
DateTime dt;
if(DateTime.TryParseExact(s, "hh:mm tt", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    dt.Dump(); // 29.05.2015 11:45:00
}

另外,您在代码示例中提到了3:19 PM字符串。由于小时部分是单个数字,因此在这种情况下您需要使用h:mm tt格式。

答案 3 :(得分:-1)

不变文化需要两位数小时。