从 Active Server Page 访问时日期/时间格式的行为不同_动易Cms教程
教程Tag:暂无Tag,欢迎添加,赚取U币!
用户在使用系统的过程中可能会碰到类似于下面的错误提示:
日期的语法错误 在查询表达式 '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 之外)中的功能有所不同,但它们具有一项共同的行为特征:当没有人实际登录系统时,区域设置在所有操作系统版本中具有相同的功能。
当有人登录计算机时,IIS 会读取登录用户的区域设置。这些设置从 HKEY_CURRENT_USER/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 的缓存日期格式具有错误的格式,并且将向请求该页的其余用户提供。
虽然区域设置在上述的各个操作系统(除 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 的缓存日期格式具有错误的格式,并且将向请求该页的其余用户提供。
相关动易Cms教程:
- MAC错误的解决方法
- 如何屏蔽动易后台导航里的某个功能菜单?
- 动易.NET版本留言自动选定栏目方法
- 动易SiteFactoty整合Discuz!NT3.0
- 在任意位置获取根节点ID标签
- 如何开启SiteWeaver6.8的支持,反对功能
- Windows 2008安装动易.NET系统之四----动易系统安装篇
- Windows 2008安装动易.NET系统之三----数据库篇
- Windows 2008安装动易.NET系统之二----IIS、目录环境配置篇
- 数据库修复,SQL Server 2005内部操作不一致的处理
- 如何安装动易.net程序权限配置
- 为什么提示对Windows系统文件夹下的Temp目录没有访问权限?
- 相关链接:
- 教程说明:
动易Cms教程-从 Active Server Page 访问时日期/时间格式的行为不同。