Как мне преобразовать 12-часовую временную строку в C # TimeSpan? - PullRequest
14 голосов
/ 11 января 2011

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

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

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

Ответы [ 5 ]

38 голосов
/ 11 января 2011

Вы, вероятно, хотите использовать 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;
7 голосов
/ 07 июля 2012

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

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 голосов
/ 11 января 2011

Попробуйте это:

DateTime time;
if(DateTime.TryParse("4:15PM", out time)) {
     // time.TimeOfDay will get the time
} else {
     // invalid time
}
2 голосов
/ 09 ноября 2013

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

    public TimeSpan GetTimeFromString(string timeString)
    {
        DateTime dateWithTime = DateTime.MinValue;
        DateTime.TryParse(timeString, out dateWithTime);
        return dateWithTime.TimeOfDay;
    }
1 голос
/ 11 января 2011

Попробуйте:

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

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

...