i have a list of email addresses of people that have different nationalities (for each person i have the iso code)
when i send the email to all these people, in the text of the mail i need to to convert a datetime field to a string formatted in their specific culture.
for this i'm doing
CultureInfo ci = new CultureInfo(ISO);
myStringDate = myDate.ToString(ci.DateTimeFormat.ShortDatePattern);
and work perfect, but if i use LongDatePattern instead short, for displaying date like "Monday, 13 June 2010" its work fine except the language of the day and month.
if the person culture is it-IT i need to display "Martedi" and "Giugno" not "monday" and "June"
how can i do that without change the current UI culture?
Those patterns describe year, month, day and other parameter locations in output result of Datetime. But month and day names are taken from CultureInfo object, not pattern. There's DateTime.ToString overload that supports passing CultureInfo parameter along with format
CultureInfo culture = new CultureInfo(ISO);
DateTime.Now.ToString(culture.DateTimeFormat.LongDatePattern, culture);
This way, ToString() will respect both pattern and names from specified culture
You have only specified the format pattern, so it takes the other settings from the default format. You should also specify the format provider:
myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern, ci);
or using the standard format string D
for long date pattern (as it will take the actual pattern from the format provider that you specify):
myStringDate = myDate.ToString("D", ci);
Demo:
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));
Output:
giovedì 26 gennaio 2012
den 26 januari 2012
Use DateTimeFormatInfo
class.
string code = "mk-MK";
DateTimeFormatInfo info =
DateTimeFormatInfo.GetInstance(CultureInfo.GetCultureInfo(code));
string longDate =
DateTime.Now.ToString(info.LongDatePattern, new System.Globalization.CultureInfo(code));
I just had a similar problem and solved it with:
DateTime.Now.ToString("dddd, dd MMMM yyyy", new System.Globalization.CultureInfo("it-IT"));
That was thanks to this link.
DateTime.ToString()
has yet another overload with which you can specify both the pattern you want (as you are currently and the culture to use. Try:
myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern,
ci);
来源:https://stackoverflow.com/questions/9022100/datetime-tostring-month-and-day-language