102 votes

Obtenir le suffixe du jour lorsque vous utilisez DateTime.ToString ()

Est-il possible d'inclure le jour suffixe lors du formatage d'une date à l'aide DateTime.ToString()?

Pour exemple, j'aimerais imprimer la date dans le format suivant - lundi 27 juillet 2009. Cependant, l'exemple le plus proche que je peux trouver à l'aide de DateTime.ToString() est le lundi 27 juillet 2009.

Puis-je faire cela avec DateTime.ToString() ou vais-je avoir à revenir à mon propre code?

276voto

Lazlow Points 1328

Une autre option à l'aide de l'interrupteur:

string GetDaySuffix(int day)
{
    switch (day)
    {
        case 1:
        case 21:
        case 31:
            return "st";
        case 2:
        case 22:
            return "nd";
        case 3:
        case 23:
            return "rd";
        default:
            return "th";
    }
}

71voto

Bryan Bailliache Points 557

Comme une référence, j'ai toujours utiliser/se référer à SteveX mise en forme de Chaîne et il ne semble pas y avoir de "th" dans les variables disponibles mais vous pouvez facilement créer une chaîne avec

string.Format("{0:dddd dd}{1} {0:MMMM yyyy}", DateTime.Now, (?));

Vous devez alors fournir un "st" 1, "nd" pour 2, "rd" pour 3, et "e" pour tous les autres et peut être doublée avec un "? :" instruction.

(DateTime.Now.Day % 10 == 1 && DateTime.Now.Day != 11) ? "st"
: (DateTime.Now.Day % 10 == 2 && DateTime.Now.Day != 12) ? "nd"
: (DateTime.Now.Day % 10 == 3 && DateTime.Now.Day != 13) ? "rd"
: "th"

47voto

Moose Factory Points 2075

À l'aide d'un couple de méthodes d'extension:

namespace System
{
    public static class IntegerExtensions
    {
        public static string ToOccurrenceSuffix(this int integer)
        {
            switch (integer % 100)
            {
                case 11:
                case 12:
                case 13:
                    return "th";
            }
            switch (integer % 10)
            {
                case 1:
                    return "st";
                case 2:
                    return "nd";
                case 3:
                    return "rd";
                default:
                    return "th";
            }
        }
    }   

    public static class DateTimeExtensions
    {
        public static string ToString(this DateTime dateTime, string format, bool useExtendedSpecifiers)
        {
            return dateTime.ToString(format)
                .Replace("nn", dateTime.Day.ToOccurrenceSuffix().ToLower())
                .Replace("NN", dateTime.Day.ToOccurrenceSuffix().ToUpper());
        } 
    }
}

Utilisation:

return DateTime.Now.ToString("dddd, dnn MMMM yyyy", useExtendedSpecifiers: true);
// Friday, 7th March 2014

Remarque: L'entier de la méthode d'extension peut être utilisé pour n'importe quel nombre, et pas seulement de 1 à 31. par exemple

return 332211.ToOccurrenceSuffix();
// th

13voto

Anthony Walsh Points 359

Une autre option est d'utiliser l' Opérateur Modulo:

public string CreateDateSuffix(DateTime date)
{
    // Get day...
    var day = date.Day;

    // Get day modulo...
    var dayModulo = day%10;

    // Convert day to string...
    var suffix = day.ToString(CultureInfo.InvariantCulture);

    // Combine day with correct suffix...
    suffix += (day == 11 || day == 12 || day == 13) ? "th" :
        (dayModulo == 1) ? "st" :
        (dayModulo == 2) ? "nd" :
        (dayModulo == 3) ? "rd" :
        "th";

    // Return result...
    return suffix;
}

8voto

Piotr Lewandowski Points 150

Ici est la version étendue y compris les 11, 12 et 13:

DateTime dt = DateTime.Now;
string d2d = dt.ToString("dd").Substring(1);
string daySuffix =
    (dt.Day == 11 || dt.Day == 12 || dt.Day == 13) ? "th"
    : (d2d == "1") ? "st"
    : (d2d == "2") ? "nd"
    : (d2d == "3") ? "rd"
    : "th";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X