Sha*_*pta 158 .net c# datetime types casting
我试图将我的字符串格式化值转换为格式的日期类型dd/MM/yyyy.
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
问题是什么 ?它有一个要求的第二个覆盖IFormatProvider.这是什么?难道我还需要通过这个?如果是,如何在这种情况下使用它?
编辑
Parse和之间有什么区别ParseExact?
编辑2
Slaks和Sam的两个答案都适合我,目前用户正在提供输入,但我将确保使用maskTextbox它们是有效的.
考虑到类型安全性,性能或您想要的所有方面,哪个答案更好
Sam*_*eff 233
使用DateTime.ParseExact.
this.Text="22/11/2009";
DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null);
SLa*_*aks 42
您需要调用ParseExact,它会解析与您提供的格式完全匹配的日期.
例如:
DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
该IFormatProvider参数指定用于解析日期的区域性.
除非你的字符串来自用户,否则你应该通过CultureInfo.InvariantCulture.
如果字符串确实来自用户,则应传递CultureInfo.CurrentCulture,这将使用用户在"控制面板"的"区域选项"中指定的设置.
Gre*_*reg 20
解析DateTime的字符串表示是一件棘手的事情,因为不同的文化具有不同的日期格式..Net知道这些日期格式,并System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat在你打电话时将它们从你当前的文化中拉出来DateTime.Parse(this.Text);
例如,字符串"22/11/2009"不匹配ShortDatePattern为美国(EN-US),但它确实难挡法国(FR-FR).
现在,您可以调用DateTime.ParseExact并传入您期望的确切格式字符串,也可以传入适当的文化DateTime.Parse来解析日期.
例如,这将正确解析您的日期:
DateTime.Parse( "22/11/2009", CultureInfo.CreateSpecificCulture("fr-FR") );
当然,你不应该只是随意选择法国,而是适合你的需要.
您需要弄清楚的System.Threading.Thread.CurrentThread.CurrentCulture是设置的内容,以及它是否/为什么与您的期望不同.
Ami*_*ips 16
虽然上述解决方案有效,但您也可以使用以下方法修改webconfig文件...
<configuration>
   <system.web>
     <globalization culture="en-GB"/>
   </system.web>
</configuration>
Ric*_*hez 10
您可能需要为该特定日期格式指定文化,如:
    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
基于此参考,下一种方法对我有用:
// e.g. format = "dd/MM/yyyy", dateString = "10/07/2017" 
var formatInfo = new DateTimeFormatInfo()
{
     ShortDatePattern = format
};
date = Convert.ToDateTime(dateString, formatInfo);
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]);