我有一个方法,
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
我该如何解决这个问题? 感谢。
答案 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”,输入日期字符串为value
。 OutputDate
将把新的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;
}