2013-06-29 28 views
2

我有以下的方法,以验证字符串是否为有效的datetime:C# - 字符串未被识别为有效日期时间

public bool isDate(string date) 
     { 
      bool check = false; 

      try 
      { 
       DateTime converted_date = Convert.ToDateTime(date); 
       check = true; 
      } 
      catch (Exception) 
      { 
       check = false; 
      } 
      return check; 
     } 

现在,除了“字符串未被识别为有效日期时间”被抓住了,每当我试图通过这样的字符串:

“12/31/2013 12:00:00 AM”

我不明白为什么会这样。有人可以帮我解决这个问题吗?

+2

['DateTime.TryParse'](http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx)有什么问题? –

回答

3

最有可能您的当前区域性设置是从日期中提供的格式不同,您可以尝试指定文化明确:

CultureInfo culture = new CultureInfo("en-US"); // or whatever culture you want 
Convert.ToDateTime(date, culture); 
+0

谢谢安德烈:)我正在试验一下,看看哪一个能得到想要的结果。谢谢:) – Matthew

+0

谢谢安德烈:)我格式化日期如下:DateTime date =(DateTime)DatePicker_ExpiryDate.Value; string expiry_date = date.ToString(“yyyy-MM-dd HH':​​'mm':'ss”);它现在完美:) – Matthew

+1

@Matthew,以及指定日期的确切格式是另一种可能的方式。但是,我仍然会建议你查看你的文化设置 - 这很奇怪,你的代码最初并不起作用。 – Andrei

4

代替try/catch块,请尝试使用内置的TryParse方法DateTime类。它将您的字符串作为参数,如果它成功转换,它将把值放在“result”变量中。它返回一个表示它是否工作的布尔值。

public bool isDate(string date) 
{ 
    var result = new DateTime(); 

    return DateTime.TryParse(date, out result); 
} 
+1

将此与安德烈的答案结合 – khlr

+0

谢谢:)我正在做实验。我会让你知道它是否有效 – Matthew

+0

我使用以下对话格式化日期:DateTime date =(DateTime)DatePicker_ExpiryDate.Value; string expiry_date = date.ToString(“yyyy-MM-dd HH':​​'mm':'ss”); – Matthew

1

您还可以使用DateTime.TryParseExact并传递一个格式字符串(例如:MM/dd/yy H:mm:ss zzz,多看here)来检查日期有特定的格式。

相关问题