正在将 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 AM、5:00 PM 这样的值时,此 returns 为假。这里有什么问题?
tt
不作为 custom TimeSpan
format strings 的格式说明符之一存在。这是有道理的,因为 TimeSpan
实际上是一个持续时间,而不是一天中的时间值 - 不幸的是 DateTime.TimeOfDay
确实 return一个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 填充。您很可能希望 HHmm
和 HH:mm
而不是 hhmm
和 hh:mm
来接受像“21:00”这样的值。
或者,使用我的 Noda Time 库,它具有特定的时间类型 (LocalTime
),可以直接用 LocalTimePattern
解析:)
我正在使用以下方法将时间字符串解析为 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 AM、5:00 PM 这样的值时,此 returns 为假。这里有什么问题?
tt
不作为 custom TimeSpan
format strings 的格式说明符之一存在。这是有道理的,因为 TimeSpan
实际上是一个持续时间,而不是一天中的时间值 - 不幸的是 DateTime.TimeOfDay
确实 return一个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 填充。您很可能希望 HHmm
和 HH:mm
而不是 hhmm
和 hh:mm
来接受像“21:00”这样的值。
或者,使用我的 Noda Time 库,它具有特定的时间类型 (LocalTime
),可以直接用 LocalTimePattern
解析:)