win7 中 IIS 7 now() 等時間日期函式返回格式問題(不匹配 ACCESS 的 datetime 欄位的格式)

jessezappy發表於2020-12-12

    今天弄個小網站,準備增加點程式碼,之前在 win2008 裡面跑的好好的,因為在伺服器改程式碼不順手,就在本機 win7 裡面裝了 IIS 7 修改除錯。

弄到一半,發現上傳檔案總是報錯,程式碼複製到伺服器又正常了,甚是詭異,經過跟蹤除錯,發現本機 IIS 中錯誤資訊為:Data type mismatch in criteria expression 

找到對應程式碼,是一句在 MDB 資料庫中插入上傳檔案資訊的語句。於是將伺服器和本機的資料庫插入 SQL 語句顯示出來,一看發現其中上傳時間那裡不一樣,

伺服器為:2020/12/12 1:39:19

而本機的為:2020/12/12 星期六 上午 1:39:19

這就詭異了。猜想是控制皮膚裡面的時間日期格式設定問題,於是將本機的設定調為和伺服器的一樣,重啟電腦測試,故障依舊,本機依然返回那個帶中文的格式。

說明 IIS 沒有使用自定義的時間日期格式設定!!!

於是只能查詢相關文章,發現有提到修改 :HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/OLEAUT/VarConversionLocaleSetting = 2 (DWORD) (https://blog.csdn.net/riyao/article/details/6435019

按照說明新增到登錄檔後,重啟電腦,故障依舊!!!

無奈之下,換關鍵詞繼續找資料,找到一篇:https://www.cnblogs.com/tangge/p/3394093.html ,說的是 Vista 系統的,也不管了,試試再說,於是按照說明開啟 [HKEY_USERS\.DEFAULT\Control Panel\International] 仔細一看,果然果然設定的和 IIS 輸出的格式一致,而跟自定義設定不同:

於是改了試試看,果然有效!!!

回到伺服器一看,才發現伺服器預設的已經是我們需要的設定:

由此可見,win2008 預設的時間日期設定是合我的需求的,而 win7 的預設設定就有點崴人了。

下面記錄下我們需要的正確的系統預設的時間日期格式設定,有需要的可以直接複製為 .reg 檔案匯入登錄檔即可:

Windows Registry Editor Version 5.00

[HKEY_USERS\.DEFAULT\Control Panel\International]
"sLongDate"="yyyy'年'M'月'd'日'"
"sShortDate"="yyyy-MM-dd"
"sTimeFormat"="HH:mm:ss"
"sShortTime"="HH:mm"
"sYearMonth"="yyyy'年'M'月'"

當然,最靠譜的還是自己寫一個時間日期格式轉換函式,這樣不管伺服器怎麼設定,最終都可以得到我們需要的格式!!!

相關文章