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

问题描述 投票:0回答:2

我有这种格式的字符串日期

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
c# asp.net datetime iis
2个回答
3
投票

首先,

"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); 

1
投票

您收到错误只是因为服务器端默认文化与开发站点不同。

您应该使用

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);
© www.soinside.com 2019 - 2024. All rights reserved.