有很多套裝軟體或專案開發程式都沒有處理到這一塊問題,只會強制要求使用者的電腦環境一定要調整為西元年或民國年格式。

其實程式的日期格式會隨作業系統設定而自動改變畫面是一個特色,不過當程式有在用西元日期資料來處理單據編號或是轉換為民國年的部份可就沒那麼單純了。

例如程式寫成取得西元日期格式的後兩碼,但是當系統被設為民國年在兩碼時 99/12/23 就會取得 /1 而在三碼時 099/12/23 會取得 9/ 都是不合理的。

因為程式後續還會轉型為數字並減去 1911 來轉換取得民國年的數字。有些沒處理好的軟體就會在此出現錯誤訊息。

說實在的,如果需要同時用到的程式有衝突的時候,就不能同時開啟使用,難不成要多買台電腦分開用。有些程式還會在啟動時直接去調整系統的設定來適應自己,最後啟動的決定環境設定。

其實可以將程式設定成不受作業系統設定以及改變而受影響,可以利用 UpdateFormatSettings 屬性設定來決定當收到作業系統的 WM_WININICHANGE 通知訊息後,是否要重新讀取作業系統的設定格式。

另外也手動設定程式本身的所要使用的日期時間格式。程式碼如下:

1
2
3
4
5
6
7
8
9
10
//鎖定程式日期時間格式不受系統變化影響
Application.UpdateFormatSettings := false;

//設定程式本身所使用的日期時間格式
LongDateFormat  := 'yyyy/MM/dd';
ShortDateFormat := 'yyyy/MM/dd';
LongTimeFormat  := 'hh:nn:ss';
ShortTimeFormat := 'hh:nn:ss';
DateSeparator := '/';
TimeSeparator := ':';

這樣就可以固守程式的日期格式,自行在程式中管理日期的處理方式。