Как получить DayNames с языка только в.NET
Предположим, что у меня есть только код страны (en, de, fr), и мне нужно отображать дни недели на этом языке. Я знаю о RegionInfo и CultureInfo - но я не могу найти решение. Если я создаю информацию о стране из (например) "en", у меня нет информации DateTime. Также было бы хорошо просто взять первый соответствующий регион. Для примера en-US для en или de-DE для de.
Я не знаю, есть ли различия в DayNames, но я знаю, что есть некоторые за месяцы. де-де Фебруар - де-АТ Фебер - все равно мне все равно. Событие, если оно может быть "немного другим" (чтобы увидеть Фебруара вместо Фебера) - это все еще немец.
И это то, чего я хочу достичь - получить запись в понедельник - получить де и написать Montag...
Есть ли способ создать регион только из кода языка?
7 ответов
Эта часть может быть полезной: чтобы перейти от "en" к CultureInfo, более быстрый путь
CultureInfo ci = CultureInfo.CreateSpecificCulture("en")
Во второй части, я полагаю, вы спрашиваете названия дней, поэтому вы бы написали
string[] names = ci.DateTimeFormat.DayNames
Обычно, когда вы говорите "мне все равно", вы начинаете бороться с 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);
DateTime.Today.ToString("dddd", new CultureInfo("zh-TW"))
Выше код будет печатать понедельник как 星期一 (китайский язык).
Это даст вам список культур:
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 он-ил ху-ху-это-это он-это 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-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- КЗ кы-кг св-ке уз-латн-уз тт-ру па-ин гу-ин та-ин те-ин кн-ин м-р-н са-ин мн-мн гл-эс кок-ин сыр-сы дв-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-УЗ ар-ЭГ ж-ХК де-АТ ан-АС эс-эс фр-са ср-цирл-кс ар-лы ж-с-г де-ю ан-ца эс-гт ф-ч ар-дз ж-мо де -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 нсо-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 км-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 ТК-ТМ SMN-FI OC-FR ES-США SE-NO MT-MT BS-Латн-BA ZU-ZA XH-ZA TN-ZA TZM- Latn-DZ iu-Latn-CA hsb-DE
Попробуй это:-
string culture = "твоя культура"
CultureInfo myCulture = new CultureInfo (культура);
DateTimeFormatInfo dtfi = myCulture.DateTimeFormat;
dayString = dtfi.GetDayName (ваша дата здесь..);
Чарли Дж
Dim days As String() Dim days As String() Dim cul As New System.Globalization.CultureInfo("de-DE") month = cul.DateTimeFormat.MonthNames days = cul.DateTimeFormat.DayNames
Поскольку "de" является NeutralCulture, будет невозможно вывести DayNames из DateTimeFormat, если вы попробуете CultureInfo.GetCultureInfo("de").
Я бы посоветовал вам запустить 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);
}