Ответ 1
Простейший подход, вероятно, состоит в том, чтобы проанализировать его как DateTime
с помощью DateTime.ParseExact
, а затем использовать TimeOfDay
, чтобы указать TimeSpan
.
DateTime dateTime = DateTime.ParseExact(text,
"hh:mm tt", CultureInfo.InvariantCulture);
TimeSpan span = dateTime.TimeOfDay;
Нечетно видеть ведущее число 0 в течение нескольких часов, когда вы также указываете обозначение am/pm. Возможно, вам понадобится "h" вместо "hh" в строке формата, чтобы разрешить "21:45 pm" вместо "21:45 pm".
(Я также утверждаю, что это странное использование TimeSpan
в первую очередь, но тогда типы даты и времени .NET несколько перепутаны в моем представлении. Я бы рекомендовал использовать Noda Time, но я предвзято:)