C#-字符串未被识别为有效的日期时间

C#-字符串未被识别为有效的日期时间,c#,string,exception,datetime,C#,String,Exception,Datetime,我使用以下方法来验证字符串是否为有效的日期时间: public bool isDate(string date) { bool check = false; try { DateTime converted_date = Convert.ToDateTime(date); check = true; }

我使用以下方法来验证字符串是否为有效的日期时间:

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

            try
            {
                DateTime converted_date = Convert.ToDateTime(date);
                check = true;
            }
            catch (Exception)
            {
                check = false;
            }
            return check;
        }
现在,每当我尝试传递如下字符串时,都会捕获异常“字符串未被识别为有效日期时间”:

“2013年12月31日12:00:00上午”


我无法理解为什么会发生这种情况。有人能帮我解决这个问题吗?

很可能您当前的区域设置与中提供的格式日期不同。您可以尝试显式指定区域性:

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

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

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

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

您还可以使用
DateTime.TryParseExact
并传递一个格式字符串(例如
MM/dd/yy H:MM:ss zzz
,请参阅更多信息)来检查日期是否具有特定格式。

有什么问题吗?将此与Andrei的回答结合起来谢谢:)我正在试验。我会让您知道它是否有效我使用以下约定格式化了日期:DateTime date=(DateTime)DatePicker\u ExpiryDate.Value;字符串到期日=date.ToString(“yyyy-MM-dd-HH':'MM':'ss”);谢谢安德烈:)我正在做一点实验,看看哪一个能得到想要的结果。谢谢:)谢谢Andrei:)我将日期格式化如下:DateTime日期=(DateTime)DatePicker_ExpiryDate.Value;字符串到期日=date.ToString(“yyyy-MM-dd-HH':'MM':'ss”);它现在工作得很好:)@Matthew,另外一种可能的方式是指定日期的精确格式。但我还是建议您检查一下您的区域性设置——奇怪的是,您的代码最初无法工作。