est-il possible d'obtenir le Par défaut mais j'ai besoin de: p> actuelCulture code> S de DateTimeFormatinfo CODE>, mais de retour lundi fort> comme premier jour de la semaine au lieu de cultureinfo.currentculture.datetimeformat.daynames code> retours: < / p>
9 Réponses :
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:
D'accord, je pense que cela est probablement plus facile. J'ai fini par utiliser si (actuelculture.twoletterisolanguagenameagename == "fr") code> Pour vérifier l'anglais.
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. Le clone code> code> sera maintenant traiter lundi comme premier jour de la semaine. P> 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 Mais je laisserai cette réponse en tant que wiki communautaire au cas où une personne touche à l'avenir . p> p> FirstDayOfweek Code>. P>
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.
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.) p> Je voulais poster cela plus tôt mais je me batte un dur externe mourant conduire ... p> p>
Belle solution, j'aime la méthode de décalage, une pratique pratique pour rester dans la bibliothèque.
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();
}
Astucieux! C'est certainement plus facile sur les yeux que la manipulation de la matrice directe.
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)
Si vous obtenez des noms de jour basés sur des dates, peu importe le jour de la semaine de démarrage de la semaine; DateTimeFormat.daynames identifie dimanche comme 0, de même que DateTime, peu importe si les semaines commencent jeudi ou qu'avez-vous. :)
Pour obtenir un nom de jour en anglais à partir d'une date: p> si pour une raison quelconque, vous voulez absolument gérer la (valeur magique!) Ints qui sous-tendent la Dayofweek énumération, déplacez simplement l'index et prenez le module, donc cartographie 0 => 6, 1 => 0, et ainsi de suite: p> string GetDayName(int dayIndex)
{
return CultureInfo.InvariantCulture.DateTimeFormat.DayNames[(dayIndex + 6) % 7];
}
"DonetimeFormat.daynames identifie dimanche comme 0" - cette déclaration semble être fausse. Le DOCS ON DayNames CODE> < / a> Etat: "Le premier élément (l'élément à l'index zéro) représente le premier jour de la semaine dans le calendrier défini par la propriété du calendrier."
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);
}
Une autre solution simple:
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?