Gibt es eine analoge Form des folgenden Codes:
%Vor%Oder muss es sein:
%Vor% Ich versuche eine if
-Anweisung zu schreiben, die überprüft, ob dieser Monat mehr als 31 Tage hat.
BEARBEITEN
Ich schätze, das eigentliche Problem ist, dass ich einige von dem, was mir beigebracht wurde, unterzeichne, aber jedes Mal, wenn ich versuche, die Sun-Website über Java zu benutzen, verwirrt es mich einfach. Meine Frage ist, wenn ich einen Monat von einem Benutzer und einem Tag bekomme und ich es in ein MM / dd-Format gebe und es auswerte, dann gibt es einen einfacheren Weg, um zu überprüfen, ob der Monat und der Tag gültig sind und nachdem ich nachgesehen habe da ich gültig bin, kann ich das MM / dd in dem Format drucken, das ich habe. Wenn es nicht gültig ist Drucken Sie eine Zeile mit dem Hinweis Ungültiger Monat oder ungültiger Tag.
Wenn Sie C oder Java verwenden, können Sie dies tun:
%Vor% In einigen Sprachen könnten Sie sogar case 4,6,9,11:
schreiben.
Andere Möglichkeiten wären, ein Array zu erstellen [4,6,9,11], einige funktionale Sprachen sollten etwas wie if month in [4,6,9,11] do something;
Wie Lior sagte, kommt es auf die Sprache an.
EDIT: Übrigens könntest du das auch machen (nur zum Spaß, schlechter Code weil nicht lesbar):
%Vor% Alter, das ist lächerlich. (month==4||month==6||month==9||month==11)
ist vollkommen in Ordnung.
Sie geben die Sprache nicht an, aber wenn Sie Java verwenden, dann ja, Sie müssen es auf die zweite Art tun, oder verwenden Sie andernfalls switch:
%Vor%Alternativ finden Sie es möglicherweise nützlich und sauberer (je nach Design), die Werte nicht hart zu codieren, sondern sie woanders zu behalten:
%Vor%Eine ziemlich wörtliche Übersetzung in Java wäre:
%Vor% Ich weiß nicht, was an 4, 6, 9 und 11 so besonders ist. Es ist wahrscheinlich besser, eine Enum zu verwenden, zusammen mit EnumSet
oder vielleicht eine Methode für die Enumeration. OTOH, vielleicht macht JodaTime etwas Sinnvolles.
Ich denke, dass Ihr Code selbstdokumentierter sein wird, wenn Sie die in Calendar eingebauten statischen Konstanten verwenden (z. B. Calendar.JANUARY, etc.)
Wenn Sie dies oft tun - mehr als einmal - würde ich empfehlen, eine Methode namens has31Days () oder isReportMonth () zu schreiben, um die Überprüfung an einer Stelle durchzuführen.
UPDATE:
Wichtig sind nicht die Monate, die 31 Tage haben - es ist die Geschäftsregel, die Ihnen etwas über Berichte für diese Monate sagt.
Ich könnte es so schreiben (hoffe, ich habe die Monate mit 31 Tagen richtig):
%Vor%Führen Sie keine spezifischen Prüfungen durch. Versuchen Sie es und konvertieren Sie es in ein gültiges Datum. Wenn es eine Ausnahme auslöst, melden Sie ein ungültiges Datum an. Schließlich müssen Sie auch einen Tag größer als 28 (oder 29?) Überprüfen, wenn der Monat Februar ist.
C # wie ich Java nicht kenne:
int [] DaysInMonth = new int [] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
if (DaysInMonth [Monat] == 31) ...
Vergessen Sie die ausgeklügelte Logik, die viele Leute befürworten - diese Methode ist viel übersichtlicher und einfacher zu debuggen.
Um jedoch die Frage zu beantworten, die Sie tatsächlich in Ihrer Nachricht gestellt haben:
if (falsch) ...
Es gibt keine Monate mit MEHR als 31 Tage!
Bearbeiten: Ja, ich habe das Schaltjahr nicht angesprochen. Das muss separat gehandhabt werden. Die Frage war, ob der Monat 31 Tage hatte - etwas, das mir jemand beantwortet. Ich hätte es mit einer Reihe von Bools machen können, aber da das Array sowieso da sein muss, warum nicht die Längen hinein?
Für Daten verwende ich Joda Time , die oben erwähnt wurden, aber ich verstehe, wenn es nicht für Sie gilt. Wenn Sie nur wollen, dass es gut aussieht, können Sie zuerst eine Liste mit Werten definieren, an denen Sie interessiert sind, und dann prüfen, ob sich Ihr Monat in dieser Liste befindet:
%Vor%Simpe Aux-Funktion (C #), die Ihnen die Anzahl der Tage eines bestimmten Monats angibt:
%Vor%Hoffe es hilft
In Icon können Sie
machen %Vor%Sie können das auch tun
%Vor%Bin ich der Einzige mit
? %Vor%zumindest in C, kann jetzt nicht nach Java suchen
Der moderne Ansatz verwendet die Klassen java.time, die die problematischen alten Datum-Zeit-Klassen ersetzen.
Die Month
Aufzählung definiert ein Objekt für jeden Monat des Jahres.
Sehen Sie, ob der aktuelle Monat in dieser Sammlung von Monaten mit 31 Tagen ist.
%Vor%Oder Sie könnten einfach das heutige Datum abfragen .
%Vor% Das Framework java.time ist in Java integriert 8 und später. Diese Klassen ersetzen die problematischen alten Legacy Datum-Uhrzeit-Klassen wie java.util.Date
, Calendar
, & amp; SimpleDateFormat
.
Das Joda-Time Projekt, jetzt in Wartungsmodus , rät Migration zum java.time Klassen.
Weitere Informationen finden Sie im Oracle-Lernprogramm . Und suchen Sie nach Stack Overflow für viele Beispiele und Erklärungen. Spezifikation ist JSR 310 .
Wo erhalten Sie die Klassen java.time?
Das ThreeTen-Extra -Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von java.time. Hier finden Sie einige nützliche Klassen wie Interval
, < a href="http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearWeek.html"> YearWeek
, YearQuarter
und mehr .
Gehe zum ersten des nächsten Monats und subtrahiere einen Tag.
%Vor%Tags und Links java if-statement