【问题标题】:.ToShortDateString returning different cultural format than expected.ToShortDateString 返回与预期不同的文化格式
【发布时间】:2014-12-04 08:58:18
【问题描述】:

这对你来说很奇怪。

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

在最近一次运行中,文本区域中的日期开始以美国格式(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;

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

这与 Windows 7 升级有关吗?还是 SCCM?

提前致谢

【问题讨论】:

  • 你的CurrentCulture 是什么?是en-GB 还是en-US
  • “我知道我可以将 ToShortDateString() 替换为 ToString("dd/MM/yyyy") 以强制格式正确” 不正确,@987654328 @ 还将使用您当前文化的日期分隔符,而不是 /
  • 据我所知,所有 PC 都在使用 en-GB

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


【解决方案1】:

ToShortDateString method 使用 ShortDatePattern property 与您的 CurrentCulture"d" standard date and time format 相同。

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

但是en-USculture 的ShortDatePattern 属性是M/d/yyyy

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

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

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

【讨论】:

  • 我首先想到的是区域设置已经改变,但是它们设置为英语(英国),这与XP电脑的设置方式相同。
  • 奇怪的是,当我们在 PC 上运行测试程序时,它报告 pc 是英语(英国),但是当您在几秒钟后运行界面时,它会在 en 中写入日期-美国格式。我们已经发现在 Windows 7 中有多个存储/访问 ODBC 的地方是否有类似的区域设置?
  • @Tony 所以你的CurrentCulture 属性是en-GB?在你的程序中运行看看。
  • 只是检查一下,当您说 CurrentCulture 时,您的意思是通过 Thread.CurrentThread.CurrentCulture 吗?如果是这样,那么根据测试程序,Windows 7 和 XP 电脑都返回 en-GB。同时返回 XP en-GB 上的代码。我们没有 Windows7 开发 PC 可以逐步完成。
  • @Tony 实际上是System.Globalization.CultureInfo.CurrentCulture。如果是en-GB,打印成dd/MM/yyyy格式太正常了。
【解决方案2】:

经过多次测试和摸索,我们认为我们已经找到了答案。

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

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

经过很多困惑,我们注意到,当 SCCM 安装界面时,它正在安装 RTM 版本的 Report Viewer,但当 Click Once 安装界面时,安装了 SP1 版本的 Report Viewer。

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

为什么 Report Viewer 的版本会影响 PC 的文化设置或 ToShortDateString() 的工作方式,我们不知道,但这似乎是问题所在。

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 2014-02-08
    • 2019-12-27
    • 2015-08-13
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多