Как преобразовать 12-часовую строку времени в С# TimeSpan?

Когда пользователь заполняет форму, они используют раскрывающийся список, чтобы указать, в какое время они хотели бы запланировать тест. Этот выпадающий список содержит все время дня с шагом 15 минут в 12-часовой форме AM/PM. Например, если пользователь выбирает 4:15 вечера, сервер отправляет строку "4:15 PM" на веб-сервер с отправкой формы.

Мне нужно как-то преобразовать эту строку в Timespan, поэтому я могу сохранить ее в поле времени базы данных (с linq to sql).

Кто-нибудь знает о хорошем способе преобразования строки времени AM/PM в промежуток времени?

Ответы

Ответ 1

Вероятно, вы хотите использовать DateTime вместо TimeSpan. Вы можете использовать DateTime.ParseExact для синтаксического анализа строки в объект DateTime.

string s = "4:15 PM";
DateTime t = DateTime.ParseExact(s, "h:mm tt", CultureInfo.InvariantCulture); 
//if you really need a TimeSpan this will get the time elapsed since midnight:
TimeSpan ts = t.TimeOfDay;

Ответ 2

Самый простой способ:

var time = "4:15 PM".ToTimeSpan();

.

Это принимает код Фила и помещает его в вспомогательный метод. Это тривиально, но это делает один вызов:

public static class TimeSpanHelper
{        
    public static TimeSpan ToTimeSpan(this string timeString)
    {
        var dt = DateTime.ParseExact(timeString, "H:mm tt", System.Globalization.CultureInfo.InvariantCulture);            
        return dt.TimeOfDay;
    }
}

Ответ 3

Попробуйте следующее:

DateTime time;
if(DateTime.TryParse("4:15PM", out time)) {
     // time.TimeOfDay will get the time
} else {
     // invalid time
}

Ответ 4

Мне нравится, что Ли отвечает на лучшее, но acermate был бы правильным, если вы хотите использовать tryparse. Чтобы объединить это и получить временные рамки, выполните следующие действия:

    public TimeSpan GetTimeFromString(string timeString)
    {
        DateTime dateWithTime = DateTime.MinValue;
        DateTime.TryParse(timeString, out dateWithTime);
        return dateWithTime.TimeOfDay;
    }

Ответ 5

Try:

string fromServer = <GETFROMSERVER>();
var time = DateTime.Parse(fromServer);

Это дает вам время, если вы также создаете конечное время, вы можете получить Timespans, выполнив арифметические объекты w/DateTime.