Il semble qu'il n'y ait pas quelque chose comme ça.
La façon la plus recommandée pour le faire:
var d = DateTime.Now;
var result2 = String.Format("{0:dd}{1} {2:MMM yyyy}", d, Ordinal(d.Day), d);
Une façon très hacky pour y parvenir est de créer une coutume IFormatProvider
. L'OMI, il est juste beaucoup de mal, mais juste pour montrer une autre façon ... (je n'ai pas beaucoup d'expérience avec cela, il pourrait ne pas être très « correct »)
using System;
namespace Test
{
class Program
{
public static string Ordinal(int number)
{
string suffix = String.Empty;
int ones = number % 10;
int tens = (int)Math.Floor(number/10M) % 10;
if (tens == 1)
{
suffix = @"\t\h";
}
else
{
switch (ones)
{
case 1:
suffix = @"\s\t";
break;
case 2:
suffix = @"\n\d";
break;
case 3:
suffix = @"\r\d";
break;
default:
suffix = @"\t\h";
break;
}
}
return suffix;
}
public class MyFormat : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
return (formatType == typeof(ICustomFormatter)) ? this : null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
var d = (DateTime)arg;
var or = Ordinal(d.Day);
format = format.Replace("or", or);
return d.ToString(format);
}
}
static void Main(string[] args)
{
var result = String.Format(new MyFormat(), "{0:ddor MMM yyyy}.", DateTime.Now);
return;
}
}
}
More info on Custom IFormatProvider
Merci pour la réponse Bruno. Cependant, je cherchais une méthode qui n'était pas si intrusive pour l'utilisateur. – Simon