datetime.tostring月和日语言
我有一个具有不同国籍的人的电子邮件地址列表(对于我拥有iso代码的每个人)
当我向所有这些人发送电子邮件时,在邮件文本中我需要将datetime字段转换为在其特定文化中格式化的字符串。
为此,我正在做
CultureInfo ci = new CultureInfo(ISO); myStringDate = myDate.ToString(ci.DateTimeFormat.ShortDatePattern);
并且工作完美,但如果我使用LongDatePattern而不是短,用于显示日期,如“2010年6月13日星期一”,它的工作正常,除了日期和月份的语言。
如果人的文化是它 – 我需要显示“Martedi”和“Giugno”而不是“星期一”和“六月”
如何在不改变当前UI文化的情况下做到这一点?
这些模式描述了Datetime输出结果中的年,月,日和其他参数位置 。 但是,月份和日期名称取自CultureInfo对象,而不是模式。 有DateTime.ToString重载 ,支持传递CultureInfo参数和格式
CultureInfo culture = new CultureInfo(ISO); DateTime.Now.ToString(culture.DateTimeFormat.LongDatePattern, culture);
这样,ToString()将尊重指定文化中的模式和名称
您只指定了格式模式,因此它采用默认格式的其他设置。 您还应指定格式提供程序:
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
使用DateTimeFormatInfo
类。
string code = "mk-MK"; DateTimeFormatInfo info = DateTimeFormatInfo.GetInstance(CultureInfo.GetCultureInfo(code)); string longDate = DateTime.Now.ToString(info.LongDatePattern, new System.Globalization.CultureInfo(code));
DateTime.ToString()
还有另一个重载,您可以使用它来指定所需的模式(就像您当前和要使用的文化一样。尝试:
myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern, ci);
我刚遇到类似的问题并解决了以下问题:
DateTime.Now.ToString("dddd, dd MMMM yyyy", new System.Globalization.CultureInfo("it-IT"));
这要归功于这个环节。