10
votes

Obtenir des noms de la journée de culture actuelle dans .net

est-il possible d'obtenir le actuelCulture S de DateTimeFormatinfo , mais de retour lundi comme premier jour de la semaine au lieu de Dimanche . Et, si la culture actuelle n'est pas l'anglais (c'est-à-dire que le code ISO n'est pas "EN"), laissez-la comme défaut par défaut.

Par défaut cultureinfo.currentculture.datetimeformat.daynames retours: < / p> xxx

mais j'ai besoin de: xxx


1 commentaires

Cette question est un peu déroutante pour la raison suivante: vous souhaitez renvoyer des noms de jour en anglais à partir de lundi, mais vous souhaitez conserver la commande par défaut pour toute autre culture - vous ne voulez donc pas savoir quelle chaîne représente la journée dans cultures qui ne sont pas anglais?


9 Réponses :


11
votes

Vous pouvez utiliser cultures personnalisées pour créer une nouvelle culture basée sur la base un existant. Pour être honnête, cependant, je dirais que c'est probablement un peu lourd. La solution "la plus simple" peut simplement être quelque chose comme: xxx


1 commentaires

D'accord, je pense que cela est probablement plus facile. J'ai fini par utiliser si (actuelculture.twoletterisolanguagenameagename == "fr") Pour vérifier l'anglais.



6
votes

Vous pouvez cloner la culture actuelle qui obtient une copie écritable de l'objet de cultureInfo. Ensuite, vous pouvez définir le DateTimeFormat.FirstDayofeek au lundi. XXX

Le clone sera maintenant traiter lundi comme premier jour de la semaine.

EDIT

Après avoir réaffecté votre question, je ne pense pas que cela fera ce que vous attendez. Les noms de jour reviendront toujours dans le même ordre quel que soit le paramètre FirstDayOfweek .

Mais je laisserai cette réponse en tant que wiki communautaire au cas où une personne touche à l'avenir .


2 commentaires

Wow, je n'ai jamais su que c'était aussi facile!


Merci pour votre réponse, j'ai déjà essayé cela et j'ai été déçu de toujours obtenir les jours de retour dans le même ordre. Bonne idée cependant.



5
votes

Je pose cela comme une réponse distincte car il n'a vraiment rien à voir avec mon autre réponse (qui peut être utile à quelqu'un d'autre à l'avenir dans un autre contexte.)

comme alternative à la solution de Codeka, vous pouvez Faites aussi quelque chose comme ça (qui éviterait de devoir avoir à duper le code des noms de jour en US.) xxx

Je voulais poster cela plus tôt mais je me batte un dur externe mourant conduire ...


1 commentaires

Belle solution, j'aime la méthode de décalage, une pratique pratique pour rester dans la bibliothèque.



5
votes

Une autre idée, inspirée de la réponse de Josh, en utilisant une file d'attente au lieu de déplacer la matrice.

var days = CultureInfo.CurrentCulture.DateTimeFormat.DayNames;
if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "en")
{
    var q = new Queue<string>(days);
    q.Enqueue(q.Dequeue());
    days = q.ToArray();
}


1 commentaires

Astucieux! C'est certainement plus facile sur les yeux que la manipulation de la matrice directe.




0
votes

Puisque un seul jour est déplacé, j'ai résolu ce problème comme celui-ci:

'the list is from Sunday to Saturday
'we need Monday to Sunday
'so add a Sunday on the end and then remove the first position
dayNames.AddRange(DateTimeFormatInfo.CurrentInfo.DayNames)
dayNames.Add(DateTimeFormatInfo.CurrentInfo.GetDayName(DayOfWeek.Sunday))
dayNames.RemoveAt(0)


0 commentaires


0
votes

Cela devrait également fonctionner bien.

    public static List<String> Days
    {
        var abbDayNames = CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedDayNames;

        var days = new string[7];
        var firstDayOfWeek = (int)DayOfWeek.Monday;
        for (int i = 6; i>= 0; i--)
        {
            days[i] = abbDayNames[(firstDayOfWeek + i) % 7];
        }

        return new List<string>(days);
    }


0 commentaires

1
votes

Une autre solution simple: xxx


0 commentaires