Как проанализировать строку с часами, больше, чем 24 к TimeSpan?

Как проанализировать строку как 30:15 к TimeSpan в C#? 30:15 означает 30 часов и 15 минут.

string span = "30:15";
TimeSpan ts = TimeSpan.FromHours(
    Convert.ToDouble(span.Split(':')[0])).
  Add(TimeSpan.FromMinutes(
    Convert.ToDouble((span.Split(':')[1]))));

Это не кажется слишком изящным.

27
задан Johan - reinstate Monica 21 June 2011 в 22:13
поделиться

3 ответа

Если вы уверены, что формат всегда будет «ЧЧ: мм», попробуйте что-нибудь вроде этого:

string span = "35:15";
TimeSpan ts = new TimeSpan(int.Parse(span.Split(':')[0]),    // hours
                           int.Parse(span.Split(':')[1]),    // minutes
                           0);                               // seconds
29
ответ дан 28 November 2019 в 05:30
поделиться

Подобно ответу Люка:

String span = "123:45";
Int32 colon = span.IndexOf(':');
TimeSpan timeSpan = new TimeSpan(Int32.Parse(span.Substring(0, colon - 1)),
                                 Int32.Parse(span.Substring(colon + 1)), 0);

Очевидно, предполагается, что исходная строка правильно сформирована (состоит из двух частей, разделенных двоеточием и допускающих разбор до целого числа).

4
ответ дан 28 November 2019 в 05:30
поделиться

Обычно используется TimeSpan.ParseExact там, где требуется определенный формат. Но единственные форматы часов, которые могут быть указаны, - это части дней (см. Custom TimeSpan Format Strings ).

Следовательно, вам нужно будет проделать эту работу самостоятельно:

string input = "30:24";
var parts = input.Split(':');
var hours = Int32.Parse(parts[0]);
var minutes = Int32.Parse(parts[1]);
var result = new TimeSpan(hours, minutes, 0);

(Но с некоторой проверкой ошибок.)

Конструктор трех целочисленных значений timespan допускает переполнение часов> = 24 в счетчике дней.

0
ответ дан 28 November 2019 в 05:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: