首页 > CMS建站 > 动易CMS > 正文

从 Active Server Page 访问时日期/时间格式的行为不同

2020-05-19 18:52:38
字体:
来源:转载
供稿:网友

用户在使用系统的过程中可能会碰到类似于下面的错误提示:

日期的语法错误 在查询表达式 'LastTime>#2005-6-5 下午 07:23:55#' 中。

此问题与服务器的区域时间设置及注册表中的读取时间方式有关,下面转贴微软MSDN上关于此问题的说明。详见:http://support.microsoft.com/default.aspx?scid=kb;zh-cn;306044


概要

当您从 Active Server Page (ASP) 中使用 Now Date Time 函数时,时间和日期的格式根据模拟用户、身份验证用户、登录用户以及服务器上操作系统版本等参数的不同而有所不同。

备注:除非您特地模拟某一用户,否则模拟用户与身份验证用户相同。此外,登录用户是指登录服务器的用户。

更多信息

根据客户要求,从系统中读取区域设置的方式(主要是日期/时间格式)已经在操作系统的最近版本中做出更改,以便为开发人员提供对此功能的更多控制。

虽然区域设置在上述的各个操作系统(除 Windows NT 4.0 之外)中的功能有所不同,但它们具有一项共同的行为特征:当没有人实际登录系统时,区域设置在所有操作系统版本中具有相同的功能。

从 ASP 中访问时的日期/时间格式化方式

IIS 4.0 (Windows NT 4.0)

当没有人实际登录服务器时,IIS 从系统默认设置中(尤其是从 Locale.nls 文件中)读取日期/时间格式(和其他区域设置)。您可以在"控制面板"的"区域设置"部分更改此设置,更改之后必须重新启动计算机。

当有人登录计算机时,IIS 会读取登录用户的区域设置。这些设置从 HKEY_CURRENT_USER/Control Panel/International 注册表配置单元中的用户配置文件设置中读取。您可以在"控制面板"的"区域设置"部分更改此设置,更改之后必须重新启动计算机。

IIS 5.0(Windows 2000 和 Windows 2000 Service Pack 1)

在操作系统安装过程中,将在系统注册表的 HKEY_USERS/.Default/Control Panel/International 配置单元中指定并写入区域设置选项。

通常,当显示日期/时间的 ASP 页得到请求时,IIS 将首先确定注册表中是否已加载身份验证用户的配置文件。假如已加载,IIS 将读取该用户配置文件的区域设置 ID,然后在 IIS 高速缓存中进行查找(假如此区域设置的区域设置已缓存)。假如被缓存,IIS 将用缓存的格式为请求提供服务。假如没有在缓存值中找到该区域设置,则从 HKEY_CURRENT_USER/Control Panel/International 注册表配置单元中该用户的配置文件设置中读取日期/时间格式。信息随即被缓存,而 IIS 将显示具有所缓存日期/时间格式的 ASP 页。

假如身份验证用户没有用户配置文件,IIS 将从系统默认设置中读取区域设置 ID,然后在缓存的区域设置中查找该区域设置。假如找到缓存值,IIS 将用缓存的格式为请求提供服务;否则,IIS 将从 HKEY_USERS/.Default/Control Panel/International 注册表配置单元中的系统默认设置中读取该格式。信息随即被缓存,而 IIS 将显示具有所缓存日期/时间格式的 ASP 页。

但是,此逻辑存在问题。对于每一个请求,IIS 将检查是否为结果区域设置 ID 缓存了日期/时间格式。假如 IIS 找到缓存的格式,就会使用它。假如首次浏览到该页的用户的区域设置 ID 与要用于 ASP 页的预期区域设置 ID 相同,但它们的日期格式不同于要用于 ASP 页的预期日期格式,则会出现问题。在这种情况下,该区域设置 ID 的缓存日期格式具有错误的格式,并且将向请求该页的其余用户提供。
共3页上一页123下一页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表