繁体   English   中英

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

[英]Parsing AM/PM time string to 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。 怎么了

tt作为自定义TimeSpan格式字符串的格式说明符之一不存在。 这很有意义,因为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);

请注意,由于您的示例数据未填充0,因此我已将hh:mm tt纠正为h:mm tt 您很可能希望HHmmHH:mm代替hhmmhh:mm接受“ 21:00”之类的值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM