字符串不能被识别为有效的日期时间”;格式dd / MM / yyyy"

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

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


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

有什么问题? 它有第二个重写,要求IFormatProvider。这是什么?我也需要传递这个?如果是,在这种情况下如何使用?< / p >

编辑

ParseParseExact之间有什么区别?

编辑2

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

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

939736 次浏览

使用DateTime.ParseExact

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


DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null);

你需要调用ParseExact,它解析一个与你提供的格式完全匹配的日期。

例如:

DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);

IFormatProvider参数指定用于解析日期的区域性 除非你的字符串来自用户,否则你应该传递CultureInfo.InvariantCulture.
如果字符串确实来自用户,则应该传递CultureInfo.CurrentCulture,它将使用用户在控制面板中的区域选项中指定的设置

解析DateTime的字符串表示是一件棘手的事情,因为不同的区域性有不同的日期格式。. net可以识别这些日期格式,并在调用DateTime.Parse(this.Text);

例如,字符串"22/11/2009"与美国(en-US)的ShortDatePattern不匹配,但与法国(fr-FR)匹配。

现在,你可以调用DateTime.ParseExact并传递你所期望的确切格式字符串,或者你可以传递一个适当的区域性给DateTime.Parse来解析日期。

例如,这将正确解析你的日期:

DateTime.Parse( "22/11/2009", CultureInfo.CreateSpecificCulture("fr-FR") );

当然,你不应该随意选择法国,而应该选择适合你需要的地方。

你需要弄清楚的是System.Threading.Thread.CurrentThread.CurrentCulture被设置为什么,以及它是否/为什么与你所期望的不同。

您可能需要为特定的日期格式指定区域性,如下所示:

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); //dd/MM/yyyy


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


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

详情请点击这里:

http://msdn.microsoft.com/en-us/library/5hh873ya.aspx

将字符串转换为datetime:

Datetime DT = DateTime.ParseExact(STRDATE,"dd/MM/yyyy",System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat)

你可以用also

this.Text = "22112009";
DateTime newDateTime = new DateTime(Convert.ToInt32(this.Text.Substring(4, 4)), // Year
Convert.ToInt32(this.Text.Substring(2,2)), // Month
Convert.ToInt32(this.Text.Substring(0,2)));// Day

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

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

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

就像上面有人说的,你可以把它作为一个字符串参数发送,但它必须有这样的格式:例如'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就可以将其转换并放入数据库中。

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;
}

我花了很多时间才解决了这个问题

 string strDate = PreocessDate(data);
string[] dateString = strDate.Split('/');
DateTime enter_date = Convert.ToDateTime(dateString[1]+"/"+dateString[0]+"/"+dateString[2]);

手动更改:

string s = date.Substring(3, 2) +"/" + date.Substring(0, 2) + "/" + date.Substring(6, 4);

从2015年11月22日起,将在2015年11月22日转换

为我工作以下代码:

DateTime date = DateTime.Parse(this.Text, CultureInfo.CreateSpecificCulture("fr-FR"));

名称空间

using System.Globalization;

基于这个引用,下一个方法适合我:

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

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