Как преобразовать строку "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"
.
Ответ 2
Используйте TimeSpan.Parse
для преобразования строки
http://msdn.microsoft.com/en-us/library/system.timespan.parse(v = vs .110).aspx
Ответ 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 и т.д.