我的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.
有什么建议以及如何解决它?
答案 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