2011-01-11 122 views
14

当用户填写表单时,他们使用下拉菜单表示他们想要安排测试的时间。此下拉菜单包含12小时上午/下午表单中每天15分钟的所有时间。例如,如果用户选择4:15 pm,则服务器将字符串"4:15 PM"以表单submittion的形式发送到Web服务器。如何将12小时时间字符串转换为C#TimeSpan?

我需要一些如何将此字符串转换为Timespan,所以我可以将它存储在我的数据库的时间字段(与LINQ到SQL)。

任何人都知道将AM/PM时间字符串转换为时间跨度的好方法吗?

回答

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; 
+7

此示例实际上不适用于字符串,如“11:00 PM”。大写“H”格式表示24小时制。使用小写“h”可以解决该问题。 – 2013-07-11 21:01:43

+1

这是一个非常重要的细节。确认和编辑。 – 2013-12-26 21:41:47

1

尝试:

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

,让你的时间,如果你创建的结束时间,以及你可以通过做算术W/datetime对象获得的时间跨度。

3

试试这个:

DateTime time; 
if(DateTime.TryParse("4:15PM", out time)) { 
    // time.TimeOfDay will get the time 
} else { 
    // invalid time 
} 
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

我喜欢李的回答是最好的,但如果你想使用的TryParse acermate是正确的。要结合并获得时间跨度,请执行以下操作:

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