如何仅在.NET中从语言中获取DayNames

时间:2010-03-23 14:12:48

标签: c# cultureinfo regioninfo

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

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

这就是我想要实现的目标 - 在星期一得到写作 - 得到de并写Montag ......

有没有办法只使用语言代码创建区域?

7 个答案:

答案 0 :(得分:6)

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

CultureInfo ci = CultureInfo.CreateSpecificCulture("en")

对于第二部分,我相信你要求提供日期名称,所以你会写

string[] names = ci.DateTimeFormat.DayNames 

答案 1 :(得分: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);

答案 2 :(得分: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 他-IL HU-HU 伊斯兰国 它-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 英国UA 是-BY SL-SI ET-EE LV-LV LT-LT 公平 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 痛 GU-IN TA-IN TE-IN KN-IN MR-IN SA-IN MN-MN GL-ES 角-IN SYR-SY DV-MV AR-IQ ZH-CN DE-CH EN-GB ES-MX FR-BE 痒 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 熟食店 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-旺-CN PRS-AF WO-SN RW-RW 昆士兰科技大学-GT SAH-RU GSW-FR 共同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 溜溜NG SMS-FI HA-LATN-NG HR-BA FIL-PH PS-AF FY-NL NE-NP AM-ET IU-罐-CA QUZ-EC 丝 SMJ-SE LO-LA KM-KH CY-GB 博-CN SE-SE SMJ-NO 作为-IN ML-IN SE-FI 或-IN SR-Cyrl-BA BN-IN EN-IN DSB-DE TK-TM SMN-FI OC-FR ES-美国 SE-NO MT-MT BS-LATN-BA 祖ZA XH-ZA TN-ZA TZM-LATN-DZ IU-LATN-CA HSB-DE

答案 3 :(得分:1)

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

以上代码将于星期一打印为星期一(Chinise locale)。

答案 4 :(得分:0)

Dim days As String()         昏暗的月份为String()         Dim cul As New System.Globalization.CultureInfo(“de-DE”)         months = cul.DateTimeFormat.MonthNames     days = cul.DateTimeFormat.DayNames

答案 5 :(得分:0)

试试这个: -

string culture =“your culture”

CultureInfo myCulture = new CultureInfo(culture);

DateTimeFormatInfo dtfi = myCulture .DateTimeFormat;

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

查理G

答案 6 :(得分:0)

由于“de”是一个NeutralCulture,如果你尝试CultureInfo.GetCultureInfo(“de”),就不可能从DayTimeFormat中获取DayNames。

我建议您在这种情况下运行CultureInfo.CreateSpecificCulture(“de”),因为它会创建一个非中立的文化......在“de”的情况下,我得到了“de-DE”的文化从.NET众神回来:D

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

    string[] names = tmp.DateTimeFormat.DayNames;
    foreach(string name in names)
    {
        Console.WriteLine(name);
    }