dev*_*evC 1 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);
Run Code Online (Sandbox Code Playgroud)
当我尝试解析像上午9:00,下午5:00这样的值时,返回false.这有什么不对?
tt不存在作为自定义TimeSpan格式字符串的格式说明符之一.这是有道理的,因为这TimeSpan真的是一个持续时间,而不是一个时间价值 - 不幸的是,DateTime.TimeOfDay 它确实会返回一个TimeSpan.
将值解析为a 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);
Run Code Online (Sandbox Code Playgroud)
请注意,我已经更正了hh:mm tt,h:mm tt因为您的示例数据不是0填充.您很可能希望HHmm,和HH:mm而不是hhmm和hh:mm为好,接受如"21:00"的价值观.
或者,使用我的Noda Time库,它具有特定类型的时间(LocalTime),可以直接使用LocalTimePattern:) 解析