之前曾在介紹.NET DateTime Formatting時,建議過大家DateTime.ToString()最好能指定yyyy-MM-dd等格式,不要依賴Windows本身的國別設定,否則有可能發生換台機器甚至換個User結果就不同的困擾。

但如果網站專案是別人寫好的,硬是用了未指定格式的DateTime.ToString(),在中文版上跑得好好的,移到你的英文版Windows日期格式就出了問題,怎麼辦?

今天就遇到這種情況,跟同事研究出幾種解法:

  1. 如果只要處理單一Web Application,可以在web.config中加入<globalization culture="zh-TW' />(或需要的國別)
  2. 想一口氣解決一缸子Web Application的Culture設定,可以從C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\web.config 或 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\config\machine.config下手,一樣是指定<globalizatoin> culture Attribute即可。
  3. 喜歡用GUI的人,可以用IIS管理員設定:
     

最後再提醒一次,ASP.NET不像Windows Form,很少會有配合"Windows環境"自動套用不同Culture的需求,若要配合使用者的偏好使用不同日期格式,也會靠User Profile機制來實現。所以不指定格式的DateTime.ToString()只會徒增部署及管理的困擾,請避免使用。


Comments

# by 青蛙

對對對對~~ 記得 "小時候" 做畢業專題的時候就被這種莫名奇妙的錯誤搞過,當時還是 VB6 的年代,明明在自己的電腦上 run 是 ok 的,但是到了學校的電腦 run 怎麼弄就是會出錯,在史無前例,完全沒經驗的情形下,組上的高手發現,同一個日期字串前後被解釋成兩種意義:例如「2003/10/3」被解釋成2003年10月3日 與 2003年3月10日兩種情形 -_-........當場有種被日期格式給打敗的感覺@.@ 往後寫作日子裡就一直很注意也很在意這個問題了~~

# by Gery

当真遇到这个问题的时候就头痛了。。。

# by 阿奴

今天同仁剛好遇到這個問題,花了2個多小時找原因,最後才想到可能是OS與Framewok版本的緣故,再請同仁將code寫嚴謹點就ok了。 事後查到黑暗大的這篇memo,有種說不出話來,只想舉杯跟黑暗大致敬的舉動阿~~感謝黑暗大分享 (實際遇到,也解決問題,但心情也只有一個字可以形容...)

# by 阿奴

今天同仁剛好遇到這個問題,花了2個多小時找原因,最後才想到可能是OS與Framewok版本的緣故,再請同仁將code寫嚴謹點就ok了。 事後查到黑暗大的這篇memo,有種說不出話來,只想舉杯跟黑暗大致敬的舉動阿~~感謝黑暗大分享 (實際遇到,也解決問題,但心情也只有一個字可以形容...)

# by 阿奴

黑暗大不好意思,多發了一篇回應,請見諒

Post a comment