我有一个方法,
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
我该如何解决这个问题? 谢谢。
最佳答案
您遇到的问题是您的扩展方法试图专门解析 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());
}
或者,如果您因为本地化而在 dd.MM.yyyy
中特别收到一个 DateTime
,那么最好像这样在全局范围内设置您的应用程序的文化。
// Substitute appropriate culture.
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");
Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");
这样你就不需要你的扩展方法,因为 DateTime
将始终采用正确的格式。
关于c# - 字符串未被识别为有效的日期时间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25489595/