2015-07-04 52 views
3

是否有可能检查字符串是否处于有效时间格式?如何检查字符串值是否处于正确的时间格式?

Examples: 
12:33:25 --> valid 
03:04:05 --> valid 
3:4:5 --> valid 
25:60:60 --> invalid 
+0

在csharp中是否有任何日期时间模块? –

+0

http://stackoverflow.com/questions/4710501/how-to-perform-c-sharp-time-validation-in-hhmmss-format – Partha

回答

9

可以为字符串时间格式验证的目的编写附加方法。 TimeSpan结构已获得TryParse方法,该方法将尝试将字符串解析为TimeSpan并返回解析结果(是否成功)

普通方法:

public bool IsValidTimeFormat(string input) 
{ 
    TimeSpan dummyOutput; 
    return TimeSpan.TryParse(input, out dummyOutput); 
} 

扩展方法(必须在单独的非泛型静态类):

public static class DateTimeExtensions 
{ 
    public static bool IsValidTimeFormat(this string input) 
    { 
     TimeSpan dummyOutput; 
     return TimeSpan.TryParse(input, out dummyOutput); 
    } 
} 

呼唤现有string input;方法(让我们来想象它用一些值初始化)

普通方法:

var isValid = IsValidTimeFormat(input);

扩展方法:

var isValid = DateTimeExtensions.IsValidTimeFormat(input);

var isValid = input.IsValidTimeFormat();


UPDATE:.NET框架4.7

由于.NET框架4.7的发布,它可以写成一点点清洁,因为输出参数现在可以在方法调用中声明。方法调用与以前一样。

普通方法:

public bool IsValidTimeFormat(string input) 
{ 
    return TimeSpan.TryParse(input, out var dummyOutput); 
} 

扩展方法(必须在单独的非泛型静态类):

public static class DateTimeExtensions 
{ 
    public static bool IsValidTimeFormat(this string input) 
    { 
     return TimeSpan.TryParse(input, out var dummyOutput); 
    } 
} 
3

您可以使用TimeSpan.ParseTimeSpan.TryParse方法这一点。

这些方法使用这种格式。

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

在方括号([])之间的元素是可选的。

TimeSpan.Parse("12:33:25") // Parsing fine 
TimeSpan.Parse("03:04:05") // Parsing fine 
TimeSpan.Parse("3:4:5") // Parsing fine 
TimeSpan.Parse("25:60:60") // Throws overflow exception. 
0

如果你不想写的方法,您可以随时检查并看看是否成功转换。如果需要,您可以使用布尔值来显示它是否有效。

bool passed = false; 
string s = String.Empty; 
DateTime dt; 
try{ 
    s = input; //Whatever you are getting the time from 
    dt = Convert.ToDateTime(s); 
    s = dt.ToString("HH:mm"); //if you want 12 hour time ToString("hh:mm") 
    passed = true; 
} 
catch(Exception ex) 
{ 

} 
相关问题