當您從 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 的緩存日期格式具有錯誤的格式,并且將向請求該頁的其余用戶提供。