4

我的机器上安装了英语 Windows 7,并且选择的默认语言是英语(使用“区域和语言设置”)。当我阅读DateTimeFormat.ShortDatePattern使用以下 C# 语句时:

System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat.ShortDatePattern

我得到了这个结果

"M/d/yyyy"

我也试过这个语句,仍然得到相同的字符串。

System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern  
"M/d/yyyy"

但是,现在我将语言从“区域和语言设置”更改为丹麦语。现在,如果我切换到“格式”选项卡并在短日期格式下显示"M/d/åååå"哪个已本地化为丹麦语。这意味着通过更改语言,日期时间格式也会发生变化。

但是,在我的应用程序中,即使加载的 CurrentUICulture 是正确的,即丹麦语的 da-DK,我仍然会得到上述英文格式字符串。我想显示本地化的 ShortDateFormat,如区域设置中所示。我是否需要自己进行本地化,或者是否有任何构建方法可以做到这一点。如果我在这里遗漏了什么,请告诉我。

编辑:添加此信息是为了根据与彼得的讨论进一步澄清问题。

格式组合框说丹麦语(丹麦)。格式读得很好,即丹麦语,但字符串仍然显示 M/d/yyyy 而不是 M/d/åååå。这是我想在 DatePicker 控件中显示的确切字符串 M/d/åååå。换句话说,水印应该显示本地化的 ShortDatePattern。还在挣扎...

4

2 回答 2

0

尝试设置 CurrentCulture,而不是 CurrentUICulture。例如:

Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");

CurrentUICulture 指定应用程序需要的资源。

CultureInfo 指定日期、时间、数字、货币值、文本排序顺序、大小写约定和字符串比较的默认格式,并且是您需要的。

于 2013-01-17T23:13:43.150 回答
0

Here is a C# example of what you can do. (Dump is a linqpad extension method which you can ignore in your own code).

A full list of date format string is available here

var languages =  new List<string>{"de-DE", "en", "es-ES", "es-MX", "fr-FR", "it-IT", "pt-BR", "sv-SE"};
    var date = DateTime.Now;
    languages.Select (l => new {
        Lang=l,

        d_shortDate =  date.ToString("d", new CultureInfo(l)),
        D_longDate =  date.ToString("D", new CultureInfo(l)),
        g_generalDate1 =  date.ToString("g", new CultureInfo(l)),
        m =  date.ToString("m", new CultureInfo(l)),
        y =  date.ToString("y", new CultureInfo(l)),
        dd = date.ToString("dd", new CultureInfo(l)),
        mm = date.ToString("mm", new CultureInfo(l)),
        yy = date.ToString("yy", new CultureInfo(l)),
    }) .Dump();

Date formats

于 2015-08-07T23:57:31.373 回答