生产中的日期时间错误

时间:2011-03-19 17:51:18

标签: asp.net production datetime-format

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

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

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

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

  

9/2/2011 02:03 ...

它在pre prod部署的网站上工作正常,但是当我复制粘贴相同的部署代码到生产时我得到以下错误:

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

有什么建议以及如何解决它?

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

您的生产和测试环境之间是否存在任何差异 - 特别是在文化/区域设置方面? - 也许尝试明确地匹配您的javascript日历控件和代码的Parse使用的文化。

是否会抛出所有内容的异常?或者只是一些用户内容?如果您使用的是TextBox,那么这可能只是某些用户(或某些区域设置中的用户)输入了意外内容。

无论当前的修复程序如何,一旦真正的用户触及您的网页,您将需要在运行时期望此错误 - 因此要么处理FormatException,要么使用TryParse

答案 3 :(得分:0)

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