.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返回的区域性格式与预期的不同

ToShortDateString方法使用ShortDatePattern属性,该属性与CurrentCulture"d"标准日期和时间格式相同。

en-GB文化的ShortDatePattern属性是dd/MM/yyyy

en-US文化的ShortDatePattern性质是M/d/yyyy

这就是为什么不能总是用ToShortDateStringToString("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()的工作方式,我们不知道,但这似乎是问题所在。