我正在尝试从字符串转换为时间 我的字符串就像这个“上午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。
我无法理解为什么会发生任何人的想法然后请帮助我
答案 0 :(得分:4)
我会使用h
代替H
。 H
适用于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格式说明符的原因。
这就是为什么您需要使用h
或hh
说明符,不 H
或HH
的原因。由于您的小时部分可以使用前导零,因此使用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)
不变文化需要两位数小时。