[英]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
。 您很可能希望HHmm
和HH:mm
代替hhmm
和hh:mm
接受“ 21:00”之类的值。
或者,使用我的Noda时间库,该库具有特定类型的一天中的时间( LocalTime
),可以直接使用LocalTimePattern
进行解析:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.