2011-03-19 158 views
1

我有一个从日历控件服用日期我的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...

它在预督促部署的站点工作正常,但是当我复制粘贴相同的部署代码到生产我得到以下错误:

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

任何建议为什么发生和如何解决它?

回答

5

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

比较了两个环境中的hdnOne.Value.Trim()。ToString()的值吗?

+0

你能告诉我如何解决这个错误吗? – Chris 2011-03-19 17:56:32

+3

将“en-GB”替换为您选择的文化: CultureInfo ci = new CultureInfo(“en-GB”); Convert.ToDateTime(hdnOne.Value.Trim()。ToString(),ci); – JoDG 2011-03-19 18:01:50

+0

非常感谢。它对我来说就像一个魅力:-) – Chris 2011-03-21 12:28:04

1

您的生产环境和测试环境是否有区别 - 特别是关于文化/区域设置? - 也许尝试明确地匹配你的javascript日历控件和你的代码的Parse使用的文化。

这个异常是否与所有内容一起被抛出?或者只是一些用户内容?如果您使用的是TextBox,那么这可能只是一些用户(或某些语言环境中的用户)输入意外内容。

不管这个电流修复,则需要期待在运行时,这个错误一次真正的用户得到他们的手在您的网页 - 这样无论是处理出现FormatException或使用的TryParse

+0

文本框处于只读模式。我不知道如何找到两种服务器文化之间的差异,有没有什么办法可以做到这一点? – Chris 2011-03-19 17:57:54

+0

看看这个链接 - http://msdn.microsoft.com/en-us/library/kc8s65zs.aspx - 它会让你设置文化的解析操作 – Stuart 2011-03-19 17:58:51

4

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

资讯:http://msdn.microsoft.com/en-us/library/system.convert.todatetime.aspx

0

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