我有一个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上的唯一一个。因此,我假设这可能是导致我成为唯一的原因的原因。
答案 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应该起作用。