0

我的 asp.net 页面上有两个文本框,它们从日历控件中获取日期:

在日历选择中,我将选定的值分配给隐藏变量。下面是代码:

DateTime dtOne;
            dtOne = Convert.ToDateTime(hdnOne.Value.Trim().ToString());
            DateTime dtTwo = Convert.ToDateTime(hdnTwo.Value.Trim().ToString());

保留断点时,我得到 dtOne 的这个值

2011 年 9 月 2 日 02:03...

它在预先部署的站点中运行良好,但是当我将相同的部署代码复制粘贴到生产中时,出现以下错误:

System.FormatException: String was not recognized as a valid DateTime.

有什么建议为什么会发生以及如何解决?

4

4 回答 4

4

您服务器上的文化设置很可能与您的开发机器不同。在这种情况下,我认为 DateSeperator 是罪魁祸首。

您是否比较了 hdnOne.Value.Trim().ToString() 在两个环境中的值?

于 2011-03-19T17:55:02.173 回答
3

是的 - 这是一个区域设置问题。本质上,您在 Convert.ToDateTime 中使用的格式字符串无法解析生产服务器返回的日期时间。因此,要么更改您的生产服务器区域设置,要么如果这是不受欢迎的(并且可能是)在方法参数中使用适当的 IFormatProvider 参数来解释返回的字符串实际上是哪种日期时间格式,以便它可以解析它。

这里的信息:http: //msdn.microsoft.com/en-us/library/system.convert.todatetime.aspx

于 2011-03-19T18:01:36.100 回答
0

您的生产环境和测试环境之间有什么区别——尤其是在文化/语言环境方面?- 也许尝试明确匹配您的 javascript 日历控件和代码的 Parse 使用的文化。

所有内容都会引发此异常吗?还是只是一些用户内容?如果您使用的是 TextBox,那么这可能只是一些用户(或某些语言环境中的用户)输入了意外的内容。

不管当前的修复如何,一旦真正的用户接触到您的网页,您将需要在运行时预期此错误 - 所以要么处理 FormatException 要么使用 TryParse

于 2011-03-19T17:56:03.347 回答
0

如果文本框处于只读模式,那么当您从文本框中获取值时,您将获得空白。也使用 datetime.tryparse 而不是 convert

于 2011-03-19T18:06:08.480 回答