有台VM測試台,最近老出狀況。

VM上有些ASP及ASP.NET程式寫得不夠嚴謹,將日期直接轉型成字串,此時輸出結果便要受到控制台國別設定(Control Panel/Regional and Language Option,正確翻譯為地區及語言選項,我習慣稱它為國別設定)裡的日期時間格式左右。

不知是否因為VM環境不夠力加上系統太過沈重(CPU跟RAM常在破表邊緣),每隔一陣子就會發生ASP/ASP.NET日期格式同時都跑掉的狀況(變成美式m/d/yyyy,該Windows 2003為英文版)。ASP.NET的部分可以用上回介紹過的技巧強制指定culture閃開問題,ASP的部分則比較棘手...

在測試台上的ASP程式會呼叫VB6 COM+產生資料,而日期轉換便發生在VB6 COM+中,因此其使用的日期格式應由COM+ Application所指定的識別身分決定,但檢查該身分的國別語系設定,在出問題時仍設定為台灣沒有跑掉。進一步發現,Restart COM+ Application後,日期格式就會恢復正常,但隔一陣子又會再跑掉。

我的推測是,或許因機器太忙或某些不明因素,導致COM+ Application在讀取識別身分Profile中日期格式時失敗,改用預設語系設定,但因為是英文版OS,因此得到m/d/yyyy的結果。

無法徹底確認問題就如我們所推測,但我想到了鋸箭之法--將預設的國別設定也改為台灣,如此即使沒能正確讀到識別身分的設定,也不致出錯。用以下的方法將台灣設為預設國別,問題從此不再發生。Case Closed!


Comments

# by 小呆

ASP中可以用LCID=1028 來指定顯示日期的方式喔 其實寫入資料庫裡沒什麼差,LCID除了控制時間顯示也控制貨幣的顯示方式... 灌windows 英文版的預設都會變英文顯示方式 (其實那個AM/PM還可以改成其他字) 我是因為主機放國外的,研究好久才發現用LCID這個東東可以改.... (版主的病毒相關文章真是受用.........可是我還太嫩..好多都還看不懂....^^a我會常來版大這拜讀的...)

Post a comment