[MS SQL]含有上午or下午字串轉成DateTime之錯誤處理

[MS SQL]含有上午or下午字串轉成DateTime之錯誤處理

前言

此篇文章標題實在很難下,所以我需要描述一下情境。因最近接手一個國外的Project,首先必須先將開發環境建置起來,但有關日期的程式寫法,都是在C#將Datetime直接ToString,然後這個string直接丟到SP去處理,正式環境都跑得好好的,測試環境在DB就發生了日期轉型錯誤的Exception。

還原&除錯

在C#裡,會產生出類似這種string,Response的結果會是2013/5/25 上午 00:21:25這種格式

image

之後這個string,會丟到SP做一些處理,這種格式就會發生錯誤

image

當然可以修改程式,讓ToString時可以自己指定格式,如下圖

image

但整個工程太浩大,暫時不想花那麼多時間去重構程式,因DataTime的時間,是抓該台Server的日期設定格式,故朝著修改Server設定的想法去做,讓測試環境能Run起來,而到時因正式環境會全是英文,故比較不會出現有中文字串之問題。

首先先到控制台>時間語言語和區域>地區及語言

image

調整日期格式,將tt hh:mm調整為HH:mm: ss(24小時制)

QQ截圖20130523143252 QQ截圖20130523143309

照理修改完後,去頁面執行應該會是輸出此格式,但發現還是沒變(重開機也一樣)

真的很詭異,後來發現登錄檔的值根本沒變,故直接朝著他下手…在執行視窗輸入執行regedit.exe

image

進入底下路徑,將sShortTime及sTimeFormat的tt格式拿掉,之後再重開機

image

如此在頁面上,Response出來就會是2013/5/25 00:33:29這種格式,丟進SP也不會出錯了

image

後記

其實看不同國家的Code還蠻有趣的,會考慮到語系、編碼之類的問題,在看這些Code也覺得這些小地方可能要再多考慮一點,如Datetime還是把他格式標準化比較好。