.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?
在此先感谢
经过大量的测试和头划伤,我们认为我们已经找到了答案。
在测试过程中,我们注意到已经通过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
。
这就是为什么你不能总是用ToShortDateString
和ToString("dd/MM/yyyy")
来代替。它们并不总是相同的。 "/"
Custom Format Specifier具有特殊含义,作为取代我与当前文化或指定文化的日期分隔符。
我怀疑你的区域设置在升级过程中发生了变化,这就是为什么ToShortDateString
方法会产生不同的结果。
但因为你没有告诉我们您的CurrentCulture
,我们永远不知道真正的问题是什么..
什么是您的'CurrentCulture'?它是'en-GB'还是'en-US'? – 2014-10-09 12:19:52
_“我知道我可以用ToString(”dd/MM/yyyy“)替换ToShortDateString()来强制正确格式”_ That's not correct,'ToString(“dd/MM/yyyy”)'也会使用你的curent文件的日期分隔符而不是'/'。 – 2014-10-09 12:26:42
据我所知,所有电脑都在使用en-GB – Tony 2014-10-09 13:22:29