咨询区

  • Shantanu Gupta

我在项目中碰到了一个需求,需要将字符串格式的 ​​dd/MM/yyyy​​ 转成 DateTime,比如下面这样:

 class Program
{
static void Main(string[] args)
{
var str= "22/11/2009";

DateTime date = DateTime.Parse(str);
}
}

但很不幸,我的代码抛出异常了。

NET问答: 为什么时间格式 dd/MM/yyyy 转成 DateTime 会报错?_抛出异常请问我该如何解决?不过我还意外发现 ​​Parse​​ 方法还有一个 IFormatProvider 参数的重载,不清楚是否它能解决?如果可以的话该怎么传?

回答区

  • Samuel Neff

你可以使用 ​​ParseExact​​ 方法,它需要你指定强转成 DateTime 需要的字符串格式,方法签名如下:

public static DateTime ParseExact(string s, string format, IFormatProvider? provider){}

所以你应该像下面这样使用。

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

值得一提的是,IFormatProvider 一定要适配该时间字符串格式的区域 ​​Cluture​​,如果不确定的话,可以使用通用的 ​​CultureInfo.InvariantCulture​​。

  • Ricardo Sanchez

其实你抛异常的本质在于,你当前 ​​Culture​​ 的时间格式和你的需要强转的 ​​字符串时间格式​​ 是冲突的,要想解决的话,调整到正确的 ​​Cluture​​ 即可,参考如下代码。

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

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

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

或者改成这样。


using System.Globalization;

DateTime date = DateTime.Parse(this.Text, CultureInfo.CreateSpecificCulture("en-GB"));