datetime.tostring月和日语言

时间:2012-01-26 17:04:05

标签: c# datetime tostring cultureinfo

我有一个具有不同国籍的人的电子邮件地址列表(对于我拥有iso代码的每个人)

当我向所有这些人发送电子邮件时,在邮件文本中我需要将datetime字段转换为在其特定文化中格式化的字符串。

为此我正在做

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

并且工作得很完美,但是如果我使用LongDatePattern而不是短,那么显示日期就像“2010年6月13日星期一”,它的工作正常,除了日期和月份的语言。

如果是人的文化 - 我需要显示“Martedi”和“Giugno”而不是“星期一”和“六月”

如何在不改变当前UI文化的情况下做到这一点?

5 个答案:

答案 0 :(得分:14)

这些模式描述了Datetime输出结果中的年,月,日和其他参数位置。但是月份和日期名称取自CultureInfo对象,而不是模式。有DateTime.ToString overload支持传递CultureInfo参数和格式

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

这样,ToString()将尊重指定文化中的模式和名称

答案 1 :(得分:8)

您只指定了格式模式,因此它采用默认格式的其他设置。您还应指定格式提供程序:

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

答案 2 :(得分:4)

使用DateTimeFormatInfo类。

string code = "mk-MK";
DateTimeFormatInfo info =
    DateTimeFormatInfo.GetInstance(CultureInfo.GetCultureInfo(code));
string longDate = 
    DateTime.Now.ToString(info.LongDatePattern, new System.Globalization.CultureInfo(code));

答案 3 :(得分:3)

我遇到了类似的问题并用以下方法解决了这个问题:

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

这要归功于this link.

答案 4 :(得分:2)

DateTime.ToString()还有另一个重载,您可以使用它指定所需的模式(因为您当前要使用的文化。尝试:

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