当用户填写表单时,他们会使用下拉列表来表示他们希望安排测试的时间。此下拉列表包含12小时上午/下午表格中15分钟增量的一天中的所有时间。因此,例如,如果用户选择下午4:15,服务器将字符串"4:15 PM"
发送到具有表单提交的网络服务器。
我需要一些如何将此字符串转换为Timespan,因此我可以将其存储在我的数据库的时间字段中(使用linq to sql)。
任何人都知道将AM / PM时间字符串转换为时间跨度的好方法吗?
答案 0 :(得分:38)
您可能希望使用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;
答案 1 :(得分:7)
最简单的方法是:
var time = "4:15 PM".ToTimeSpan();
这需要Phil的代码并将其置于辅助方法中。这是微不足道的,但它使它成为一个单行电话:
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;
}
}
答案 2 :(得分:3)
试试这个:
DateTime time;
if(DateTime.TryParse("4:15PM", out time)) {
// time.TimeOfDay will get the time
} else {
// invalid time
}
答案 3 :(得分:2)
我最喜欢Lee的答案,但如果你想使用tryparse,那么acermate就是正确的。结合它并获得时间跨度:
public TimeSpan GetTimeFromString(string timeString)
{
DateTime dateWithTime = DateTime.MinValue;
DateTime.TryParse(timeString, out dateWithTime);
return dateWithTime.TimeOfDay;
}
答案 4 :(得分:1)
尝试:
string fromServer = <GETFROMSERVER>();
var time = DateTime.Parse(fromServer);
这会让你有时间,如果你也创造了结束时间,你可以通过算术w / DateTime对象获得Timespans。