5

假设我只有一个国家代码(en、de、fr)并且我需要用这种语言显示工作日。我知道 RegionInfo 和 CultureInfo - 但我找不到解决方案。如果我从(例如)“en”创建国家信息,则其中没有 DateTime 信息。也可以只取第一个匹配的区域。例如 en-US 表示 en 或 de-DE 表示 de。

我不知道 DayNames 是否存在差异,但我知道这几个月有一些差异。de-DE Februar - de-AT Feber——反正我不在乎。如果它可能“有点不同”(看到 Februar 而不是 Feber)的事件 - 它仍然是德语。

这就是我想要达到的目标——星期一写信——去写蒙塔格……

有没有办法仅从语言代码创建区域?

4

7 回答 7

6

这篇文章可能会有所帮助:从“en”到 CultureInfo,更快的方法是

CultureInfo ci = CultureInfo.CreateSpecificCulture("en")

对于第二部分,我相信你是在询问日期名称,所以你会写

string[] names = ci.DateTimeFormat.DayNames 
于 2010-03-23T14:47:39.813 回答
4

通常,当您说“我不在乎”时,您就会开始与 API 抗争。

无论如何,这应该工作:

var list = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
var ci = list.FirstOrDefault(c => c.IetfLanguageTag.StartsWith("de"));

var ri = new RegionInfo(ci.Name);
Console.WriteLine("Today = {0:dddd MMMM yyyy}", DateTime.Today);
于 2010-03-23T14:25:18.103 回答
1

这将为您提供文化列表:

    Dim ci As CultureInfo
    For Each ci In CultureInfo.GetCultures(CultureTypes.SpecificCultures)
        Console.WriteLine(ci.Name)
    Next

输出:ar-SA bg-BG ca-ES zh-TW cs-CZ da-DK de-DE el-GR en-US fi-FI fr-FR he-IL hu-HU is-IS it-IT ja-JP ko- KR nl-NL nb-NO pl-PL pt-BR ro-RO ru-RU hr-HR sk-SK sq-AL sv-SE th-TH tr-TR ur-PK id-ID uk-UA be-BY sl -SI et-EE lv-LV lt-LT fa-IR vi-VN hy-AM az-Latn-AZ eu-ES mk-MK af-ZA ka-GE fo-FO hi-IN ms-MY kk-KZ ky -KG sw-KE uz-Latn-UZ tt-RU pa-IN gu-IN ta-IN te-IN kn-IN mr-IN sa-IN mn-MN gl-ES kok-IN syr-SY dv-MV ar -IQ zh-CN de-CH en-GB es-MX fr-BE it-CH nl-BE nn-NO pt-PT sr-Latn-CS sv-FI az-Cyrl-AZ ms-BN uz-Cyrl-UZ ar-EG zh-HK de-AT en-AU es-ES fr-CA sr-Cyrl-CS ar-LY zh-SG de-LU en-CA es-GT fr-CH ar-DZ zh-MO de-LI en-NZ es-CR fr-LU ar-MA en-IE es-PA fr-MC ar-TN en-ZA es-DO ar-OM en-JM es-VE ar-YE en-029 es-CO ar- SY en-BZ es-PE ar-JO en-TT es-AR ar-LB en-ZW es-EC ar-KW en-PH es-CL ar-AE es-UY ar-BH es-PY ar-QA es -BO es-SV es-HN es-NI es-PR sma-NO bn-BD bs-Cyrl-BA tg-Cyrl-TJ en-SG en-MY mn-Mong-CN prs-AF wo-SN rw-RW qut-GT sah-RU gsw-FR co-FR rm-CH mi-NZ ug-CN br-FR moh-CA arn-CL ga-IE ii-CN sma-SE sr-Latn-BA quz-PE ig-NG kl-GL lb-LU ba-RU nso-ZA quz-BO yo-NG sms-FI ha-Latn -NG hr-BA fil-PH ps-AF fy-NL ne-NP am-ET iu-Cans-CA quz-EC si-LK smj-SE lo-LA km-KH cy-GB bo-CN se-SE smj -NO as-IN ml-IN se-FI 或-IN sr-Cyrl-BA bn-IN en-IN dsb-DE tk-TM smn-FI oc-FR es-US se-NO mt-MT bs-Latn- BA zu-ZA xh-ZA tn-ZA tzm-Latn-DZ iu-Latn-CA hsb-DE-FI oc-FR es-US se-NO mt-MT bs-Latn-BA zu-ZA xh-ZA tn-ZA tzm-Latn-DZ iu-Latn-CA hsb-DE-FI oc-FR es-US se-NO mt-MT bs-Latn-BA zu-ZA xh-ZA tn-ZA tzm-Latn-DZ iu-Latn-CA hsb-DE

于 2010-03-23T14:52:36.663 回答
1

DateTime.Today.ToString("dddd", new CultureInfo("zh-TW"))

上面的代码将星期一打印为星期一(中文语言环境)。

于 2012-01-30T10:33:11.830 回答
0

Dim days As String() Dim months As String() Dim cul As New System.Globalization.CultureInfo("de-DE") months = cul.DateTimeFormat.MonthNames days = cul.DateTimeFormat.DayNames

于 2010-03-23T14:39:49.077 回答
0

试试这个:-

字符串文化=“你的文化”

CultureInfo myCulture = new CultureInfo(culture);

DateTimeFormatInfo dtfi = myCulture .DateTimeFormat;

dayString = dtfi.GetDayName(你的日期在这里..);

查理·G

于 2010-03-23T14:43:11.990 回答
0

由于“de”是一种 NeutralCulture,因此如果您尝试 CultureInfo.GetCultureInfo("de"),则无法从 DateTimeFormat 中获取 DayNames。

我建议您在这种情况下运行 CultureInfo.CreateSpecificCulture("de"),因为它会创建一种非中性文化……如果是“de”,我会从.NET 诸神:D

    CultureInfo tmp = CultureInfo.CreateSpecificCulture("de");

    string[] names = tmp.DateTimeFormat.DayNames;
    foreach(string name in names)
    {
        Console.WriteLine(name);
    }
于 2010-03-23T14:52:30.100 回答