datetime.tostring месяц и день язык - PullRequest
15 голосов
/ 26 января 2012

у меня есть список адресов электронной почты людей разных национальностей (для каждого человека у меня есть iso-код)

когда я отправляю электронное письмо всем этим людям, в тексте письма, которое мне нужночтобы преобразовать поле даты и времени в строку, отформатированную в их конкретной культуре.

для этого я делаю

CultureInfo ci = new CultureInfo(ISO);
myStringDate = myDate.ToString(ci.DateTimeFormat.ShortDatePattern);

и работаю идеально, но если я использую вместо этого LongDatePattern short для отображениядата вроде «понедельник, 13 июня 2010 года» работает нормально, за исключением языка дня и месяца.

если это культура человека, то это - ЭТО, мне нужно отобразить «Мартиди» и «Джугно», а не «понедельник»и "июнь"

как я могу сделать это без изменения текущей культуры интерфейса?

Ответы [ 5 ]

14 голосов
/ 26 января 2012

Эти шаблоны описывают год, месяц, день и другие параметры местоположения в выходном результате Datetime. Но месяц и день имена взяты из объекта CultureInfo, а не из шаблона. Существует DateTime.ToString перегрузка , которая поддерживает передачу параметра CultureInfo вместе с форматом

        CultureInfo culture = new CultureInfo(ISO); 
        DateTime.Now.ToString(culture.DateTimeFormat.LongDatePattern, culture);

Таким образом, ToString () будет учитывать как шаблон, так и имена из указанной культуры

8 голосов
/ 26 января 2012

Вы указали только шаблон формата, поэтому остальные параметры будут взяты из формата по умолчанию.Вы также должны указать поставщика формата:

myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern, ci);

или использовать стандартную строку формата D для шаблона длинной даты (так как он будет принимать фактический шаблон из указанного вами поставщика формата):

myStringDate = myDate.ToString("D", ci);

Демонстрация:

CultureInfo ci = new CultureInfo("it-IT");
Console.WriteLine(DateTime.Now.ToString("D", ci));
ci = new CultureInfo("sv-SE");
Console.WriteLine(DateTime.Now.ToString("D", ci));

Вывод:

giovedì 26 gennaio 2012
den 26 januari 2012
4 голосов
/ 17 ноября 2015

У меня была похожая проблема, и я решил ее следующим образом:

DateTime.Now.ToString("dddd, dd MMMM yyyy", new System.Globalization.CultureInfo("it-IT"));

Это было благодаря этой ссылке.

4 голосов
/ 26 января 2012

Использование DateTimeFormatInfo класс.

string code = "mk-MK";
DateTimeFormatInfo info =
    DateTimeFormatInfo.GetInstance(CultureInfo.GetCultureInfo(code));
string longDate = 
    DateTime.Now.ToString(info.LongDatePattern, new System.Globalization.CultureInfo(code));
2 голосов
/ 26 января 2012

DateTime.ToString() имеет еще одну перегрузку, с помощью которой вы можете указать как нужный шаблон (так как вы в настоящее время и культура, которую хотите использовать. Попробуйте:

myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern,
                               ci);
...