Как преобразовать строку "07:35" (HH: MM) в TimeSpan

Я хотел бы знать, есть ли способ конвертировать строку с отрезком времени 24 часа в TimeSpan.

Сейчас у меня есть "стиль старой моды":

string stringTime = "07:35";
string[] values = stringTime.Split(':');

TimeSpan ts = new TimeSpan(values[0], values[1], 0);

Ответ 1

Правильно, что это будет работать:

TimeSpan time = TimeSpan.Parse("07:35");

И если вы используете его для проверки...

TimeSpan time;
if (!TimeSpan.TryParse("07:35", out time))
{
    // handle validation error
}

Учтите, что TimeSpan в первую очередь предназначен для работы с прошедшим временем, а не по времени суток. Он будет принимать значения, превышающие 24 часа, и также примет отрицательные значения.

Если вам нужно проверить, что входная строка является допустимым временем дня ( >= 00:00 и < 24:00), тогда вы должны рассмотреть это вместо:

DateTime dt;
if (!DateTime.TryParseExact("07:35", "HH:mm", CultureInfo.InvariantCulture, 
                                              DateTimeStyles.None, out dt))
{
    // handle validation error
}
TimeSpan time = dt.TimeOfDay;

В качестве дополнительного преимущества это также будет анализировать 12-часовое форматированное время, когда AM или PM включены, если вы предоставляете соответствующую строку формата, например "h:mm tt".

Ответ 3

Пытаться

var ts = TimeSpan.Parse(stringTime);

С более новым .NET у вас также есть

TimeSpan ts;

if(!TimeSpan.TryParse(stringTime, out ts)){
     // throw exception or whatnot
}
// ts now has a valid format

Это общая идиома синтаксического анализа строк в .NET, когда первая версия обрабатывает ошибочную строку, генерируя исключение FormatException, а последняя позволяет логическому TryParse напрямую предоставлять вам информацию.

Ответ 4

Вы можете преобразовать время, используя следующий код.

TimeSpan _time = TimeSpan.Parse("07:35");

Но если вы хотите получить текущее время дня, вы можете использовать следующий код:

TimeSpan _CurrentTime = DateTime.Now.TimeOfDay;

Результат будет:

03:54:35.7763461

С помощью объекта cantain Hours, Minutes, Seconds, Ticks и т.д.