将AM / PM时间字符串解析为TimeSpan

时间:2017-08-29 12:08:27

标签: c# parsing timespan

我使用以下内容将时间字符串解析为TimeSpan:

string[] formats = { "hhmm", "hmm", @"hh\:mm", @"h\:mm\:ss", @"h\:mm", "hh:mm tt" };

parseSuccess = TimeSpan.TryParseExact(value, formats, CultureInfo.CurrentCulture, TimeSpanStyles.None, out dtValue);

当我尝试解析像上午9:00,下午5:00这样的值时,返回false。这有什么不对?

1 个答案:

答案 0 :(得分:5)

tt不存在为custom TimeSpan format strings的格式说明符之一。这是有道理的,因为TimeSpan实际上是一个持续时间,而不是一个时间价值 - 不幸的是DateTime.TimeOfDay 返回TimeSpan

最简单的方法是将值解析为DateTime,然后从中获取时间:

string text = "5:00 PM";
string[] formats = { "hhmm", "hmm", @"hh\:mm", @"h\:mm\:ss", @"h:mm", @"h:mm tt" };

var success = DateTime.TryParseExact(text, formats, CultureInfo.CurrentCulture,
    DateTimeStyles.None, out var value);
Console.WriteLine(value.TimeOfDay);

请注意,我已将hh:mm tt更正为h:mm tt,因为您的示例数据未填充0。你很可能想要HHmmHH:mm而不是hhmmhh:mm来接受像“21:00”这样的值。

或者,使用我的Noda Time库,该库具有特定类型的时间(LocalTime),可以使用LocalTimePattern直接解析:)