2014-10-09 25 views
5

這是您的一個奇怪的。.ToShortDateString返回不同於預期的文化格式

我們已經有了一個c#界面,從今年年初開始運行,在Windows XP(32位)PC上沒有問題。我們剛剛使用由SCCM安裝的應用程序將PC升級到Windows 7(64位)。

隨着最新的運行,文本區域中的日期開始以美國格式(2014/5/2)而不是英國格式(2014年2月5日)出現。

正在使用的代碼是:

string Lines = FromFormat.Text + " from " + FromFormat.Charge_From.ToShortDateString() + " to " + FromFormat.Charge_To.ToShortDateString() +"."; 

凡FromFormat是一個對象與源數據,Charge_From & Charge_To是DATATIME變量。

我們已經檢查了PC的區域設置,並創建一個小的測試應用程序,以顯示從.net PC的設置,這兩個被設置爲英國格式 代碼的測試程序:

label1.Text = DateTime.Now.ToString(); 
label2.Text = DateTime.Now.ToString("dd MMM yyyy"); 
label3.Text = DateTime.Now.ToShortDateString(); 
label4.Text = Thread.CurrentThread.CurrentCulture.EnglishName; 

我知道,我可以用ToString("dd/MM/yyyy")替換ToShortDateString()來強制正確的格式,但我的問題是爲什麼會發生這種情況?

是否與Windows 7升級有關?或SCCM?

在此先感謝

+0

什麼是您的'CurrentCulture'?它是'en-GB'還是'en-US'? – 2014-10-09 12:19:52

+0

_「我知道我可以用ToString(」dd/MM/yyyy「)替換ToShortDateString()來強制正確格式」_ That's not correct,'ToString(「dd/MM/yyyy」)'也會使用你的curent文件的日期分隔符而不是'/'。 – 2014-10-09 12:26:42

+0

據我所知,所有電腦都在使用en-GB – Tony 2014-10-09 13:22:29

回答

0

經過大量的測試和頭劃傷,我們認爲我們已經找到了答案。

在測試過程中,我們注意到已經通過SCCM安裝了界面的PC(僅限Windows 7)正在生成美國日期格式的文本,但那些直接點擊一次(主要是XP)的文件正在生成英國日期格式的文本。

進一步測試證實,如果我們通過點擊一次安裝了Windows 7 PC,我們獲得了英國日期格式的文本。

我們注意到當SCCM安裝接口時,它安裝了報表查看器的RTM版本,但是當點擊一次安裝接口時,安裝了報表查看器的SP1版本。

我們更改了SCCM以安裝Report Viewer SP1,並測試了一個新的SCCM安裝版本的界面並獲得了英國日期。

爲什麼報告查看器的版本會影響個人電腦的文化設置或ToShortDateString()如何工作,我們不知道但這似乎是問題所在。

8

ToShortDateString method使用ShortDatePattern property是相同的您CurrentCulture"d" standard date and time format

en-GB culture's ShortDatePattern property is dd/MM/yyyy

但是en-US文化的ShortDatePattern財產是M/d/yyyy

這就是爲什麼你不能總是用ToShortDateStringToString("dd/MM/yyyy")來代替。它們並不總是相同的。 "/" Custom Format Specifier具有特殊含義,作爲取代我與當前文化或指定文化的日期分隔符

我懷疑你的區域設置在升級過程中發生了變化,這就是爲什麼ToShortDateString方法會產生不同的結果。

但因爲你沒有告訴我們您的CurrentCulture,我們永遠不知道真正的問題是什麼..

+0

我的第一個想法是區域設置已經改變,但它們被設置爲英語(英國),這與XP pc的設置方式相同。 – Tony 2014-10-09 13:46:30

+0

奇怪的是,當我們在PC上運行測試程序時,它報告PC是英文的(英國),但是當你幾秒鐘後運行界面時,它會以en-US格式寫出日期。我們已經發現在Windows 7中有多個存儲/訪問ODBC的地方在區域設置上有類似的地方? – Tony 2014-10-09 13:51:54

+0

@Tony所以你的'CurrentCulture'屬性是'en-GB'?運行你的程序,看看。 – 2014-10-09 14:07:51