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

时间:2014-10-09 12:18:23

标签: c# .net datetime windows-7 sccm

这对你来说很奇怪。

我们有一个自年初以来一直在运行的c#界面,在Windows XP(32位)PC上没有问题。我们刚刚通过SCCM安装的应用程序将PC升级到Windows 7(64位)。

使用最新版本,文本区域中的日期已开始以美国格式(2014年5月2日)而非英国格式(02/05/2014)显示。

正在使用的代码是:

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;

我知道我可以用ToShortDateString()替换ToString("dd/MM/yyyy")以强制使用正确的格式,但我的问题是为什么会发生这种情况?

是否与Windows 7升级有关?还是SCCM?

提前致谢

2 个答案:

答案 0 :(得分:12)

ToShortDateString method使用的ShortDatePattern property与您CurrentCulture的{​​{3}}相同。

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

en-US文化的ShortDatePattern属性为M/d/yyyy

这就是为什么您无法始终替换为ToShortDateStringToString("dd/MM/yyyy")的原因。它们并不总是一样的。 "d" standard date and time format具有特殊含义,因为将我替换为当前文化或指定文化的日期分隔符

我怀疑您的区域设置在升级过程中发生了变化,以及ToShortDateString方法产生不同结果的原因。

但是既然你没有告诉我们你的CurrentCulture,我们永远都不知道真正的问题是什么。

答案 1 :(得分:1)

经过大量测试和刮擦头后,我们认为我们已经找到了答案。

在测试期间,我们注意到通过SCCM(仅限Windows 7)安装了界面的PC正在生成美国日期格式的文本,但直接通过Click Once(主要是XP)生成的是生成英国日期格式的文本。

进一步测试证实,如果我们通过Click Once安装了Windows 7 PC,我们将获得英国日期格式化文本。

在经历了很多混乱之后,我们注意到当SCCM安装了界面时,它正在安装Report Viewer的RTM版本,但是当Click Once安装界面时,安装了SP1版本的Report Viewer。

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

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