我试图将我的字符串格式的值转换为日期类型的格式dd/MM/yyyy。

this.Text="22/11/2009";

DateTime date = DateTime.Parse(this.Text);

有什么问题吗? 它有第二个覆盖请求IFormatProvider。这是什么?我也需要通过这个吗?如果是,在这种情况下如何使用?

编辑

Parse和ParseExact之间有什么区别?

编辑2

Slaks和Sam的答案都为我工作,目前用户正在提供输入,但这将由我保证,他们是有效的使用maskTextbox。

考虑到所有方面,如类型安全,性能或您的感觉,哪个答案更好


当前回答

private DateTime ConvertToDateTime(string strDateTime)
{
DateTime dtFinaldate; string sDateTime;
try { dtFinaldate = Convert.ToDateTime(strDateTime); }
catch (Exception e)
{
string[] sDate = strDateTime.Split('/');
sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2];
dtFinaldate = Convert.ToDateTime(sDateTime);
}
return dtFinaldate;
}

其他回答

我还注意到,有时如果你的字符串在前面或结尾有空白,或在DateTime值中附加任何其他垃圾字符,那么我们也会得到这个错误消息

private DateTime ConvertToDateTime(string strDateTime)
{
DateTime dtFinaldate; string sDateTime;
try { dtFinaldate = Convert.ToDateTime(strDateTime); }
catch (Exception e)
{
string[] sDate = strDateTime.Split('/');
sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2];
dtFinaldate = Convert.ToDateTime(sDateTime);
}
return dtFinaldate;
}

就像上面有人说的,你可以把它作为一个字符串参数发送,但它必须有这样的格式:例如'20130121',你可以把它直接从控件转换成那种格式。例如,你可以从如下文本框中获取:

date = datetextbox.text; // date is going to be something like: "2013-01-21 12:00:00am"

要将其转换为:'20130121',您使用:

date = date.Substring(6, 4) + date.Substring(3, 2) + date.Substring(0, 2);

这样SQL就可以将其转换并放入数据库中。

基于这一参考资料,下一个方法对我来说是有效的:

// e.g. format = "dd/MM/yyyy", dateString = "10/07/2017" 
var formatInfo = new DateTimeFormatInfo()
{
     ShortDatePattern = format
};
date = Convert.ToDateTime(dateString, formatInfo);

虽然上面的解决方案是有效的,你也可以修改webconfig文件与以下…

<configuration>
   <system.web>
     <globalization culture="en-GB"/>
   </system.web>
</configuration>

参考:本地机器与生产机器上的日期时间格式不同