我们正在托管一个网站,当浏览到本地时加载正常,但如果您在外部浏览到它,您会得到
Conversion from string "1/15/2010 8:46:01 AM" to type 'Date' is not valid.
我在服务器上做些什么来解决这个问题。在服务器上浏览站点时,它可以工作,尽管我以与 IIS 中不同的用户身份登录服务器。
任何想法现在实际上开始引起头痛。
我们正在托管一个网站,当浏览到本地时加载正常,但如果您在外部浏览到它,您会得到
Conversion from string "1/15/2010 8:46:01 AM" to type 'Date' is not valid.
我在服务器上做些什么来解决这个问题。在服务器上浏览站点时,它可以工作,尽管我以与 IIS 中不同的用户身份登录服务器。
任何想法现在实际上开始引起头痛。
这可能与您在转换中使用的语言环境有关。也许外部使用的是英国格式,但内部使用的是美国格式。确保在将字符串转换为日期时指定您期望的确切格式。
我想查看给您带来麻烦的代码,但是“1/15/2010 8:46:01 AM”是 en-US 编码中的有效日期。确保您使用的是 en-US 文化;不要根据您用于开发/测试的机器来假设它。此外,如果 DateTime 字符串基于输入,请考虑用户可以通过控制面板覆盖当前区域性的情况。
这是来自 MSDN 的示例:
您需要的操作系统更改似乎是进入控制面板>区域和语言选项>标准和格式>将语言下拉菜单设置为英语(英国),将位置设置为英国。
理想情况下,代码应该使用Culture Invariant Dates以及日期格式化方法来解决这些问题。
由于您在对其他答案之一的评论中提到,在某些机器上它可以工作,而在其他机器上却不能,这表明问题可能出在客户端上。
浏览网页时,您的浏览器会为服务器提供一组接受/首选的语言环境。
您应该查看工作机器上的这些设置,并将它们与不工作的机器上的设置进行比较。可能是某些机器已从请求英国语言环境切换到请求美国语言环境(或相反)。
来源或无来源,如果它是 ASP.NET 应用程序,您可以将 web.config 中的文化更改为正确的文化 - 请参阅此问题和对我的回答的评论。
由于操作系统设置是针对每个用户的,因此尝试使用操作系统控制面板更改它时会遇到一些问题 - 因此尝试在应用程序中更改它通常更容易且更健壮。
服务器或数据库的区域设置已设置为美国(因为月/日/年是美国格式的日期),但代码需要英国格式的日期(日/月/年)。
检查这些并确保它们匹配并且应该没问题。
看看如何更改默认服务器区域设置
你可以试试这个setlocale.exe文件来设置它
00000409 表示英语(美国)。
00000809 表示英语(英国)。
完整列表在这里