J'ai besoin de pouvoir comparer certains noms de mois que j'ai dans un tableau.
Ce serait bien s'il y avait un moyen direct comme:
Month.toInt("January") > Month.toInt("May")
Ma recherche sur Google semble suggérer que le seul moyen est d'écrire votre propre méthode, mais cela semble être un problème assez courant pour que je pense qu'il aurait déjà été implémenté dans .Net, est-ce que quelqu'un l'a déjà fait?
Vous pouvez faire quelque chose comme ceci:
la source
Si vous utilisez la
DateTime.ParseExact()
méthode suggérée par plusieurs personnes, vous devez soigneusement réfléchir à ce que vous souhaitez faire lorsque l'application s'exécute dans un environnement non anglais!Au Danemark, ce qui
ParseExact("Januar", ...)
etParseExact("January", ...)
devrait fonctionner et qui devrait échouer?Ce sera la différence entre
CultureInfo.CurrentCulture
etCultureInfo.InvariantCulture
.la source
Une solution simple serait de créer un dictionnaire avec des noms et des valeurs. Ensuite, en utilisant Contains (), vous pouvez trouver la bonne valeur.
la source
Vous pouvez utiliser la méthode DateTime.Parse pour obtenir un objet DateTime, puis vérifier sa propriété Month. Faites quelque chose comme ceci:
L'astuce consiste à créer une date valide pour créer un objet DateTime.
la source
Vous pouvez utiliser une énumération de mois:
Cependant, je ne suis pas sûr à 100% de la syntaxe de enum.Parse ().
la source
public enum Month { January = 1, Feburary }
et également convertir un int au lieu de Month.Vous n'avez pas besoin de créer une instance de DateTime pour ce faire. C'est aussi simple que ça:
J'exécute sur la
da-DK
culture, donc ce test unitaire réussit:Je vais laisser au lecteur un exercice pour créer une surcharge où vous pouvez passer un CultureInfo explicite.
la source
ToLower()
- je n'étais pas au courant que l'une des surcharges convertit la chaîne,using the casing rules of the specified culture
bien que pour être honnête, il n'est pas évident d'après le nom de la méthode qu'elle pourrait offrir cette fonctionnalité.CurrentCulture
. Les deux"January".ToLower(CultureInfo.CurrentCulture).Dump();
et la"January".ToLower(new CultureInfo("en-NZ")).Dump();
sortiejanuary
mais les noms de mois sont en majuscules dansCurrentCulture.DateTimeFormat.MonthNames
.ToLower
:) En fait, il y a une faille légère logique dans mon code, puisque les noms de mois sont donnés à titre minuscules dans da-DK. Donc, soit on ne doit pas minuscules l'entrée, soit on doit également minuscules tous les noms de mois - selon que l'on souhaite ou non une correspondance insensible à la casse.using the casing rules of the specified culture
comme signifiant qu'elle capitaliserait par exemple des mois et des jours parCultureInfo
. Ce qui fonctionne dans votre exemple car les noms de mois sont en minuscules. Démonstration efficace de l'utilisation des tests unitaires pour induire en erreur. Cela pourrait valoir la peine d'être modifié pour indiquer clairement que votre exemple est un cas limite :-)Et en répondant à ces sept ans après que la question a été posée, il est possible de faire cette comparaison en utilisant des méthodes intégrées:
devient
Qui peut être refactorisé en une méthode d'extension pour plus de simplicité. Voici un exemple LINQPad (d'où les
Dump()
appels de méthode):Avec sortie:
la source
Si vous utilisez c # 3.0 (ou supérieur), vous pouvez utiliser des extendeurs
la source
le code d'avertissement est en version bêta.
la source
Je le traduis en code C # en version espagnole, en ce qui concerne:
la source
Ce que j'ai fait, c'est d'utiliser SimpleDateFormat pour créer une chaîne de format, analyser le texte à une date, puis récupérer le mois à partir de là. Le code est ci-dessous:
la source
Ce code vous aide ...
Méthode GetMonthName - elle renvoie la chaîne ...
Si vous voulez obtenir un mois sous forme d'entier, utilisez simplement -
J'espère que ça t'aide!!!
Merci!!!
la source