.ToShortDateString返回不同于预期的文化格式

问题描述:

这是您的一个奇怪的。.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

经过大量的测试和头划伤,我们认为我们已经找到了答案。

在测试过程中,我们注意到已经通过SCCM安装了界面的PC(仅限Windows 7)正在生成美国日期格式的文本,但那些直接点击一次(主要是XP)的文件正在生成英国日期格式的文本。

进一步测试证实,如果我们通过点击一次安装了Windows 7 PC,我们获得了英国日期格式的文本。

我们注意到当SCCM安装接口时,它安装了报表查看器的RTM版本,但是当点击一次安装接口时,安装了报表查看器的SP1版本。

我们更改了SCCM以安装Report Viewer SP1,并测试了一个新的SCCM安装版本的界面并获得了英国日期。

为什么报告查看器的版本会影响个人电脑的文化设置或ToShortDateString()如何工作,我们不知道但这似乎是问题所在。

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