[英]IIS String was not recognized as a valid DateTime
我有一个问题,
我有这种格式dd/MM/yyyy
的字符串日期,然后使用Convert.ToDateTime(date)
将其转换为 DateTime object 它在 VS 中运行得很好,但是当我将它发布到 IIS 时,它总是抛出String was not recognized as a valid DateTime
.
但是如果将格式更改为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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.