Ich muss in der Lage sein, einige Monatsnamen zu vergleichen, die ich in einem Array habe.
Es wäre schön, wenn es einen direkten Weg gäbe wie:
Month.toInt("January") > Month.toInt("May")
Meine Google-Suche scheint darauf hinzudeuten, dass die einzige Möglichkeit darin besteht, eine eigene Methode zu schreiben. Dies scheint jedoch ein häufig genug auftretendes Problem zu sein, von dem ich denke, dass es bereits in .Net implementiert wurde. Hat dies bereits jemand getan?
Sie könnten so etwas tun:
quelle
Wenn Sie die von
DateTime.ParseExact()
mehreren Personen vorgeschlagene Methode verwenden, sollten Sie sorgfältig überlegen, was passieren soll, wenn die Anwendung in einer nicht englischen Umgebung ausgeführt wird!Welches von
ParseExact("Januar", ...)
undParseExact("January", ...)
sollte in Dänemark funktionieren und welches sollte scheitern?Das wird der Unterschied zwischen
CultureInfo.CurrentCulture
und seinCultureInfo.InvariantCulture
.quelle
Eine einfache Lösung wäre, ein Wörterbuch mit Namen und Werten zu erstellen. Dann können Sie mit Contains () den richtigen Wert finden.
quelle
Sie können die DateTime.Parse-Methode verwenden, um ein DateTime-Objekt abzurufen und dann seine Month-Eigenschaft zu überprüfen. Mach so etwas:
Der Trick besteht darin, ein gültiges Datum zu erstellen, um ein DateTime-Objekt zu erstellen.
quelle
Sie können eine Aufzählung von Monaten verwenden:
Ich bin mir jedoch nicht 100% sicher über die Syntax für enum.Parse ().
quelle
public enum Month { January = 1, Feburary }
und statt eines Monats auch in ein int umwandeln sollten.Sie müssen dazu keine DateTime-Instanz erstellen. So einfach ist das:
Ich beschäftige mich mit der
da-DK
Kultur, daher besteht dieser Komponententest:Ich überlasse es dem Leser als Übung, eine Überladung zu erstellen, in der Sie eine explizite CultureInfo übergeben können.
quelle
ToLower()
- Ich wusste nicht, dass eine der Überladungen die Zeichenfolge konvertiert,using the casing rules of the specified culture
obwohl es fairerweise aus dem Methodennamen nicht ersichtlich ist, dass sie diese Funktionalität bieten könnte.CurrentCulture
. Sowohl die Ausgabe- als auch die Monatsnamen werden in der Groß-"January".ToLower(CultureInfo.CurrentCulture).Dump();
und"January".ToLower(new CultureInfo("en-NZ")).Dump();
Kleinschreibungjanuary
großgeschriebenCurrentCulture.DateTimeFormat.MonthNames
.ToLower
:) Eigentlich gibt es eine leichte logische Fehler in meinem Code, seit Monatsnamen sind als Kleinbuchstaben in da-DK gegeben. Entweder sollte man die Eingabe nicht in Kleinbuchstaben schreiben, oder man sollte auch alle Monatsnamen in Kleinbuchstaben schreiben - je nachdem, ob eine Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung gewünscht wird oder nicht.using the casing rules of the specified culture
, dass sie z. B. Monate und Tage pro Jahr kapitalisiertCultureInfo
. Was in Ihrem Beispiel funktioniert, weil Monatsnamen in Kleinbuchstaben geschrieben sind. Effektive Demonstration der Verwendung von Unit-Tests zur Irreführung. Könnte eine Bearbeitung wert sein, um klar zu machen, dass Ihr Beispiel ein Randfall ist :-)Wenn Sie diese Frage sieben Jahre nach der Beantwortung der Frage beantworten, können Sie diesen Vergleich mit integrierten Methoden durchführen:
wird
Was der Einfachheit halber in eine Erweiterungsmethode umgewandelt werden kann. Das Folgende ist ein LINQPad-Beispiel (daher die
Dump()
Methodenaufrufe):Mit Ausgabe:
quelle
Wenn Sie c # 3.0 (oder höher) verwenden, können Sie Extender verwenden
quelle
Der Warncode ist in der Beta-Version.
quelle
Ich übersetze es in C # -Code in der spanischen Version, Grüße:
quelle
Ich habe SimpleDateFormat verwendet, um eine Formatzeichenfolge zu erstellen, den Text auf ein Datum zu analysieren und dann den Monat daraus abzurufen. Der Code ist unten:
quelle
Dieser Code hilft Ihnen ...
GetMonthName-Methode - gibt eine Zeichenfolge zurück ...
Wenn Sie einen Monat als Ganzzahl erhalten möchten, verwenden Sie einfach -
Ich hoffe es hilft dir !!!
Vielen Dank!!!
quelle