【问题标题】:(ASP Classic) default date format reverted mysteriously(ASP Classic)默认日期格式神秘恢复
【发布时间】:2018-06-08 10:25:32
【问题描述】:

我工作的业务是在全新安装的 Windows Server 2016 上运行 ASP Classic 网站(我知道..)。以前在 2012 服务器上一切正常,但是我们的主机告诉我们发生了灾难性的 HDD 故障,并且他们基本上必须擦除所有内容并给我们一个新的操作系统,所以我一直在尝试重建整个东西。

一切正常,但 ASP Classic 网页中的日期默认为美国格式,没有前导零 - 例如,如果我从 SQL Server 数据库中检索 YYYYMMDD 日期,它将正确识别月/日,但只是默认为以美国格式显示。如果我使用我们的代码通过 month(dateVar)day(dateVar) 重新格式化它,一切仍然有效

这是我为尝试修复它所做的工作,主要是我在堆栈溢出时发现的:

  • 将 .NET 全球化设置为 en-GB(文化和 ui-culture)
  • 检查并确保没有应用组策略
  • 通过操作系统更改了 Windows 区域和日期格式设置
  • 更改了注册表HKEY_USERS/HKEY_LOCAL_USERS -> .DEFAULT -> Control Panel -> International 中的'sShortDate' 和'sLongDate' 格式
  • 添加了 vbscript 语言环境标识符 LCID=2057 以在一个 ASP 页面中进行测试,并且在 Global.asa 文件中也无济于事

昨晚 11 点,一切正常。今天早上我醒来发现电子邮件说日期格式又错误了。据我所知,服务器也一直在运行

我已经检查并重新检查了我已经更改的所有内容,这完全是我离开它的方式...但是日期格式已从(例如)21/01/2018 变为 1/21/2018

我有什么遗漏吗?我对 Windows Server 不是很熟悉

【问题讨论】:

  • <%@ LCID="2057" %> 一直为我工作。我认为您将其放在页面开头的声明中
  • 啊,我没有意识到您需要 @ 符号 - 这有效但仅适用于它所在的页面。我可以手动将其添加到每个文件中,但这将非常费力 - 有吗某种方式在全球范围内应用它?我尝试将它添加到我们的 serverSettings.inc 文件中,但这产生了错误(@ 命令只能在 Active Server Page 中使用一次)
  • 如果使用处理指令(带有@符号的位)太费力,您可以尝试将其设置为会话变量。 Session.LCID=2057。 Global.asa 是显而易见的地方,但如果你有一个每个页面都使用的包含文件,它也应该在那里工作。
  • 感谢 John,您的生活更安全了 - 我已经设置了 Global.asa 文件,它现在可以工作了!
  • @RossCampbell 您还可以在网站的 IIS 管理器的 ASP 部分中设置默认 LCID。更改区域设置也应该可以在根本不需要指定 LCID 的情况下工作,可能是您更改了登录用户的设置而不是整个服务器,在基于 Windows 10 的操作系统(如 Windows Server 2016)中设置默认语言的过程非常不稳定.

标签: .net asp-classic date-format globalization windows-server-2016


【解决方案1】:

解决方案,感谢 John。

我在网站根目录下创建了Global.asa文件并添加:

<script language="vbscript" runat="server"> sub Session_OnStart Session.LCID="2057" 'UK end sub </script>

这随后解决了问题 - 可以使用 ASP Response.write getLocale 进行测试

我有两个站点在 IIS 中作为应用程序添加,我还必须将 Global.asa 复制到它们的文件夹中

一直为我工作。我认为您将其放在页面开头的声明中

如果使用处理指令(带有@符号的位)太费力,您可以尝试将其设置为会话变量。会话.LCID=2057。 Global.asa 是显而易见的地方,但如果你有一个每个页面都使用的包含文件,它也应该在那里工作

【讨论】: