繁体   English   中英

IIS 字符串未被识别为有效的日期时间

[英]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 )文化信息。

还要注意MMM说明符之间的区别。 对于个位数的月份数, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM