当您从 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 的缓存日期格式具有错误的格式,并且将向请求该页的其余用户提供。