这是一个奇怪的给你。

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

在最近一次运行中,文本区域中的日期开始以美国格式 (5/2/2014) 而不是英国格式 (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?

提前致谢

最佳答案

ToShortDateString method 使用 ShortDatePattern property ,它与 "d" CurrentCulture standard date and time format 相同。
en-GB 文化的 ShortDatePattern 属性是 dd/MM/yyyy

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

这就是为什么你不能总是用 ToShortDateStringToString("dd/MM/yyyy") 替换。它们并不总是相同的。 "/" Custom Format Specifier 有一个特殊的意义,用当前文化或指定文化的日期分隔符替换我。

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

但是由于您没有告诉我们您的 CurrentCulture ,我们永远不知道真正的问题是什么..

10-06 14:49