引发格式异常

时间:2018-09-20 14:11:55

标签: c# asp.net .net

我有一个string strBuzday,其值为"09-19-2018"

string strBuzday = "09-19-2018";---Line 1

下一行是:

DateTime dt = Convert.ToDateTime(strBuzday);---Line 2

上面的代码不起作用,并且

  

“未将字符串识别为有效的DateTime”(格式异常为   被抛出)

第2行。

我有两个问题:

1. 如何解决此问题?

2。什么可能是原因,因为相同的代码可为我团队中的每个其他开发人员工作,而Visual Studio中的每个配置都完全相同,所以不会只为我工作。为什么?

编辑: 我在我的机器和我的同事机器上运行了代码,结果在两个系统上都相同-9/20/2018 10:09:09 PM。所有其他同事和我的系统之间唯一的区别是它们都在Windows 7或Windows 8或Windows 8上,而我是Windows 10或Windows 10上的唯一一个。因此,我假设这可能是导致我成为唯一的原因的原因

3 个答案:

答案 0 :(得分:3)

如果我们看看Convert.ToDateTime代码

https://referencesource.microsoft.com/#mscorlib/system/convert.cs,fce604498e2f810b

我们会找到

    public static DateTime ToDateTime(String value) {
        if (value == null)
            return new DateTime(0);
        return DateTime.Parse(value, CultureInfo.CurrentCulture);
    }

CultureInfo.CurrentCulture决定了格式。要检测Convert.ToDateTime的工作方式,请检查CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern。如果您有类似

   d.M.yyyy

然后您将在转换FormatException值时抛出"09-19-2018" month 不能为19。您可以设置正确的CurrentCulture,例如

  // en-US (USA) with right Date format     
  CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); 

  string strBuzday = "09-19-2018";
  // 19 Sep 2018 
  DateTime dt = Convert.ToDateTime(strBuzday);

或修改当前的文化

  CultureInfo myCulture = CultureInfo.CurrentCulture.Clone() as CultureInfo;

  myCulture.DateTimeFormat.ShortDatePattern = @"M-d-yyyy";

  CultureInfo.CurrentCulture = myCulture;

答案 1 :(得分:0)

我怀疑这可能是导致您停止格式化的问题。我检查了一下,对我来说也没有抛出任何错误,这很奇怪。如果这一行代码有效,那么很可能就是您的格式设置。

this.Text = "09-19-2018";
DateTime dt = DateTime.ParseExact(this.Text, "MM-dd-yyyy", null);

答案 2 :(得分:0)

根据您所说的(格式异常),一旦将其定义为DateTime,就必须将其转换,如下所示:

DateTime dt = DateTime.ParseExact("09-19-2018", "MM-dd-yyyy", CultureInfo.InvariantCulture);

string strBuzDay = dt.ToString = ("dd-MM-yyyy", cultureInfo.InvariantCulture);

如果Parse.Exact不起作用,则仅DateTime应该起作用。