2013-07-10 34 views
0

好日子其他日期时间,测试字符串转换为比DateTime.TryParseExact

通常情况下,如果我想测试一个字符串是否是一个有效的日期时间格式,我会用:

if (DateTime.TryParseExact()){ 
//do something 
} 

我想问一下,有没有什么代码可以直接测试Convert.ToDateTime()是否成功? 例如像:

if (Convert.ToDateTime(date1)){ 
//do something 
} 

if(Convert.ToDateTime(date1) == true){ 
//do soemthing 
} 

我的想法是使之成为布尔测试它的成功转换为日期时间或没有。 只是想找出代码,而不是使用DateTime.TryParseExact()

+4

DateTime.TryParseExact有什么问题? –

+0

用'try..catch'包装你的代码 –

+1

不使用DateTime.TryParse或DateTime.TryParseExact的特殊原因?这正是他们在那里的原因。 – Corak

回答

4

你的第一个代码

if (DateTime.TryParseExact()) { 
    //do something 
} 

不正是你想要的。

使用方法如下:

if (DateTime.TryParseExact(str, ...)) { // OR use DateTime.TryParse() 
    // str is a valid DateTime 
} 
else { 
    // str is not valid 
} 

您可以使用DateTime.TryParse()如果你不想提供的格式。
这两种方法都返回一个bool ean值。

+0

我明白你的意思。如果使用'DateTime.TryParseExact(str,format,...)',我需要声明一个格式来检查。 我的问题是,我可以传递'Convert.ToDateTime(str)'成为布尔或不布尔。 –

+0

@PanadolChong:如前所述,您也可以使用'DateTime.TryParse()',而不必提供格式。 – joe

0

按照您的意见:

我需要声明的格式检查,有时日期时间格式可能不同,这就是为什么我在想有没有像我所想的任何代码。

TryParseExact已采取格式。

这个简短的例子,你想用TryParseExact。如果格式或日期错误,TryParseExact不会引发异常,因此您不必担心昂贵的Try/Catch区块。相反,它将返回false

static void Main() 
{ 
    Console.Write(ValidateDate("ddd dd MMM h:mm tt yyyy", "Wed 10 Jul 9:30 AM 2013")); 
    Console.Read(); 
} 

public static bool ValidateDate(string date, string format) 
{ 
    DateTime dateTime; 
    if (DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) 
    { 
     Console.WriteLine(dateTime); 
     return true; 
    } 
    else 
    { 
     Console.WriteLine("Invalid date or format"); 
     return false; 
    } 
} 

或缩短:

public static bool ValidateDate(string date, string format) 
{ 
    DateTime dateTime; 
    return DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime); 
} 
-1

然后使用这样的事情。

bool isDateTimeValid(string date, string format) 
{ 
    try 
    { 
     DateTime outDate = DateTime.ParseExact(date, format, Thread.CurrentThread.CurrentUICulture); 

     return true; 
    } 
    catch(Exception exc) 
    { 
     return false; 
    } 
} 
+0

'DateTime.TryParseExact(...)'不会引发异常。你是不是指'DateTime.ParseExact'? – joe

+0

被编辑,是的,我想使用ParseExact –

+0

,但这正是'TryParseExact'的作用...... – joe

2

如果你真的想要你可以使用转换为。然而,使用这意味着你不会得到tryparse可以给你的功能。

的TryParse:

- 简单的if/else验证

-Wont玉石俱焚您的应用程序,如果错误数据被放入它

public static bool 
{ 
    TryParse(string s, out DateTime result) 
} 

那么如果其他验证

转换为:

- 如果错误数据放进去,你的应用程序会崩溃

- 更好地为包括尝试捕捉到这个

- 见的msdn article on ConvertTo

private static void ConvertToDateTime(string value) 
{ 
    DateTime convertedDate; 
    try { 
    convertedDate = Convert.ToDateTime(value); 
    Console.WriteLine("'{0}' converts to {1} {2} time.", 
         value, convertedDate, 
         convertedDate.Kind.ToString()); 
    } 
    catch (FormatException) { 
    Console.WriteLine("'{0}' is not in the proper format.", value); 
    } 
} 

在我眼里,你应该始终偏好Tryparse。