我有这种格式的字符串日期
dd/MM/yyyy
,然后使用DateTime
将其转换为Convert.ToDateTime(date)
对象,它在VS中运行得很好,但是当我将其发布到IIS时,它总是抛出
字符串未被识别为有效的日期时间
但是如果将格式更改为
MM/dd/yyyy
,它在 IIS 中运行正常,但如果通过 VS 运行则会出错。
string date = "19/9/2019" //"dd/MM/yyyy";
DateTime dt = Convert.ToDateTime(date); //run fine via VS, error in IIS
string date = "09/19/2019" //"MM/dd/yyyy";
DateTime dt = Convert.ToDateTime(date); //run fine via IIS, error in VS
首先,
"09/19/yyyy"
不是可以解析为DateTime
的有效字符串,它也应该在IIS上抛出异常。
Convert.ToDateTime(string)
过载使用机器上的CurrentCulture
设置。如果您的 VS 和 IIS 在不同的计算机上,请检查两台计算机上的 CurrentCulture
设置。我认为它们非常不同,其中之一没有 "dd/M/yyyy"
作为标准日期格式。
DateTime.ParseExact
方法重载,并且可以指定准确的格式和正确的(使用 /
作为 DateSeparator
)文化信息。
M
和 MM
说明符之间的区别。对于单位数字月份数字,MM
说明符将生成带有前导零的月份数字(如09
),但M
说明符不会。
string date = "19/9/2019";
DateTime myDate = DateTime.ParseExact("dd/M/yyyy", date, CultureInfo.InvariantCulture);
或
string date = "19/09/2019";
DateTime myDate = DateTime.ParseExact("dd/MM/yyyy", date, CultureInfo.InvariantCulture);
您收到错误只是因为服务器端默认文化与开发站点不同。
您应该使用
DateTime.TryParseExact
或使用 DateTime.TryParse
指定适当的 CultureInfo
。
(例如,用户的文化。)
您应该对
CultureInfo
应用适当的 ToString
- 可能是 CultureInfo.InvariantCulture
。
示例:
var varDate = DateTime.ParseExact(txtDate.Text, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);
DateTime dt3 = Convert.ToDateTime(varDate);