Comment formater une date sous la forme d’une chaîne localisée Short MonthDay

Je souhaite formater une DateTime en une chaîne contenant le nom du mois abrégé et la date à utiliser dans les libellés d’axe d’un graphique.

Les chaînes de format DateTime par défaut ne contiennent pas le mois abrégé. Je suppose qu’il n’y a pas de standard mais je pourrais prendre une sous-chaîne des 3 premiers caractères du nom du mois et la remplacer au format MonthDay. La raison pour laquelle j’utiliserais MonthDay est que la commande du mois et de la date dépend des parameters régionaux.

Quelqu’un a-t-il une meilleure idée?

http://msdn.microsoft.com/en-us/library/az4se3k1.aspx#MonthDay

Vous pouvez prendre le modèle MonthDay et remplacer “MMMM” par “MMM” – puis appliquez ce modèle:

 ssortingng pattern = CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern; pattern = pattern.Replace("MMMM", "MMM"); ssortingng formatted = dateTime.ToSsortingng(pattern); 

C’est un peu grossier, mais je crois que cela fonctionnerait.

Vous pouvez utiliser les formateurs de chaîne personnalisés pour faire ceci:

 DateTime now = DateTime.Now; Console.WriteLine("{0}", now.ToSsortingng("ddd MMMM dd")); 

Reportez-vous à la section “Fonctionnement des chaînes de format standard” sur la page vers laquelle vous avez effectué le lien pour plus d’informations.

Modifié: utilisez date.ToSsortingng("d MMM") . Il montrera 7 sep .

Voici la solution que j’ai trouvée pour la situation similaire de vouloir une version localisée de 01/29 :

 Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yy(yy)?[/\.\- ]|[/\.\- ]yy(yy)?)", "") 

Voici le format de sortie pour toutes les cultures afin que vous puissiez voir si cela fonctionnera pour vous:

 CultureInfo.GetCultures(CultureTypes.AllCultures) .Select(c => new { c.Name, c.DateTimeFormat.MonthDayPattern, c.DateTimeFormat.ShortDatePattern, DayMonth1 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"[/\.\- ]?yy[/\.\- ]?", ""), DayMonth2 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yyyy[/\.\- ]|[/\.\- ]yyyy|yy[/\.\- ]|[/\.\- ]yy)", ""), DayMonth3 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yy(yy)?[/\.\- ]|[/\.\- ]yy(yy)?)", "") }) .OrderBy(x => x.Name) .Dump(); 

Le remplacement de DateMonth1 supprimera un caractère de remplissage supplémentaire pour certaines cultures (en particulier “bg”).

Vous pouvez passer un CultureInfo dans la méthode Date.ToSsortingng (). Soit vous avez une information de culture spécifique ou vous pouvez utiliser CultureInfo.CurrentCulture:

 var date = DateTime.Now; var ci = new CultureInfo("de-CH"); var output = date.ToSsortingng("d MMM", ci); 

Rapide, facile et fait le travail.

 CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Month).Subssortingng(0,3);