字符串未被识别为有效的DateTime问题

时间:2014-08-25 15:43:12

标签: c# winforms datetime

我有一个方法,

public static DateTime ToDate(this object value)
{
    return DateTime.ParseExact(value.ToString(), "dd.MM.yyyy", CultureInfo.InvariantCulture);
}

当我使用此代码运行此代码时,

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show(DateTime.Now.ToDate().ToString());
}

此类程序出现错误,

String was not recognized as a valid DateTime

我该如何解决这个问题? 感谢。

3 个答案:

答案 0 :(得分:1)

您遇到的问题是您的扩展方法尝试以dd.MM.yyyy格式专门解析字符串。并且您正在使用DateTime.Now测试您的扩展程序,该DateTime会以您计算机上当前文化的格式(包括小时,分钟等)返回dd.MM.yyyy,这可能不在DateTime.Now.ToString("dd.MM.yyyy").ToDate()格式。您可以按如下方式测试扩展方法:public static DateTime ToDate(this string value, string format) { return DateTime.ParseExact(value, format, CultureInfo.InvariantCulture); }

但是,如果我理解你正在尝试做什么,最好更改扩展方法如下。

private void button1_Click(object sender, EventArgs e)
{
    // Testing the extension method.
    MessageBox.Show(DateTime.Now.ToString("dd.MM.yyyy").ToDate("dd.MM.yyyy").ToString());
}

并按如下方式使用

DateTime

或者,如果您在dd.MM.yyyy中专门收到// Substitute appropriate culture. Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU"); Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU"); 因为本地化,最好全局设置您的应用文化。

DateTime

这样您就不需要扩展方法,因为{{1}}将始终采用正确的格式。

答案 1 :(得分:0)

我建议使用TryParseExact

然后选择您需要的日期格式

例如:

public static DateTime ToDate(this object value)
{
    DateTime OutputDate ;
    DateTime.TryParseExact(value, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out OutputDate);
    return OutputDate ?? DateTime.Now  ;
}

在示例中:格式为“dd.MM.yyyy”,输入日期字符串为valueOutputDate将把新的datetime对象作为值,如果指令失败,它将取为null。

请验证日期格式,如果需要,请在上面的示例中替换

答案 2 :(得分:0)

你的第一个功能必须如下:

public static DateTime ToDate(this object value)
{
     string date = value.ToString("dd.MM.yyyy");
     DateTime dt = Convert.ToDateTime(date); 
     return dt;
}