这是一个奇怪的给你。
我们有一个 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
。
这就是为什么你不能总是用 ToShortDateString
和 ToString("dd/MM/yyyy")
替换。它们并不总是相同的。 "/"
Custom Format Specifier 有一个特殊的意义,用当前文化或指定文化的日期分隔符替换我。
我怀疑您的区域设置在升级过程中发生了变化,这就是 ToShortDateString
方法生成不同结果的原因。
但是由于您没有告诉我们您的 CurrentCulture
,我们永远不知道真正的问题是什么..