.ToShortDateString返回的区域性格式与预期的不同
本文关键字:格式 返回 区域性 ToShortDateString | 更新日期: 2023-09-27 18:26:06
这里有一个奇怪的。
我们有一个c#接口,自年初以来一直在windows XP(32位)PC上运行,没有出现问题。我们刚刚将PC升级到windows 7(64位),并安装了SCCM安装的应用程序。
在最近一次运行中,文本区域中的日期已开始以美国格式(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变量。
我们已经检查了电脑的区域设置,并创建了一个小测试应用程序来显示来自.Net的电脑设置,这两种设置都设置为英国格式测试应用程序代码:
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()
以强制使用正确的格式,但我的问题是为什么会发生这种情况?
这与Windows7的升级有关吗?还是SCCM?
提前感谢
ToShortDateString
方法使用ShortDatePattern
属性,该属性与CurrentCulture
的"d"
标准日期和时间格式相同。
en-GB
文化的ShortDatePattern
属性是dd/MM/yyyy
。
而en-US
文化的ShortDatePattern
性质是M/d/yyyy
。
这就是为什么不能总是用ToShortDateString
和ToString("dd/MM/yyyy")
替换。它们并不总是一样的。"/"
自定义格式说明符有一个特殊的含义,因为用当前区域性或指定区域性的日期分隔符替换我。
我怀疑您的区域设置在升级过程中发生了更改,这就是ToShortDateString
方法生成不同结果的原因。
但由于您没有告诉我们您的CurrentCulture
,我们永远不知道真正的问题是什么。
经过多次测试和挠头,我们认为我们已经找到了答案。
在测试过程中,我们注意到,通过SCCM安装界面的PC(仅限windows 7)生成的是美国日期格式的文本,而直接通过Click Once(主要是XP)生成的则是英国日期格式的文字。
进一步的测试证实,如果我们通过Click Once安装了Windows 7 PC,我们会得到英国日期格式的文本。
经过一番混乱之后,我们注意到SCCM安装界面时安装的是报表查看器的RTM版本,而Click Once安装界面时则安装了报表查看器的SP1版本。
我们更改了SCCM以安装Report Viewer SP1,并测试了新的SCCM安装版本的界面,并获得了英国日期。
为什么Report Viewer的版本会影响PC的区域性设置或ToShortDateString()
的工作方式,我们不知道,但这似乎是问题所在。