Monate mit 31 Tagen erkennen

7

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.

    
daddycardona 27.11.2009, 00:00
quelle

19 Antworten

12

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;

erlauben

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%     
schnaader 27.11.2009, 00:05
quelle
27
%Vor%

Alter, das ist lächerlich. (month==4||month==6||month==9||month==11) ist vollkommen in Ordnung.

    
irreputable 27.11.2009 00:45
quelle
7

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%     
Cowan 27.11.2009 00:05
quelle
6

Diesen Monat

%Vor%

if-Anweisung, um zu überprüfen, ob es 31 Tage in diesem Monat gibt

%Vor%

Schreibe die Anzahl der Tage für alle Monate

%Vor%

Ausgabe:

%Vor%     
zneo 27.11.2009 01:44
quelle
5

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.

    
Tom Hawtin - tackline 27.11.2009 00:17
quelle
4

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%     
duffymo 27.11.2009 01:41
quelle
3

Wenn Sie überprüfen, ob ein Monat mehr als 31 Tage hat, wäre der einfachste Weg (in Java) zu schreiben:

%Vor%     
RAY 21.07.2011 07:56
quelle
2

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.

    
blackanchorage 27.11.2009 00:15
quelle
2

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?

    
Loren Pechtel 27.11.2009 00:55
quelle
1

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%     
Bartosz Bierkowski 27.11.2009 21:28
quelle
1

Keine Frage zu Daten und Java wäre vollständig, ohne Joda Time zu erwähnen.

%Vor%
  

Januar - 31
  Februar - 29   März - 31
  April - 30   Mai - 31
  Juni - 30   Juli - 31
  August - 31
  September - 30
  Oktober - 31
  November - 30   Dezember - 31

    
brianegge 27.11.2009 02:38
quelle
1

Simpe Aux-Funktion (C #), die Ihnen die Anzahl der Tage eines bestimmten Monats angibt:

%Vor%

Hoffe es hilft

    
Vasco Teixeira-Pinto 06.01.2011 17:32
quelle
0

Für so ziemlich alles müssen Sie die zweite Option verwenden, aber in den meisten Sprachen können Sie etwas Ähnliches wie

schreiben %Vor%

oder besser noch

%Vor%     
dagoof 27.11.2009 00:05
quelle
0

Wenn Sie C # verwenden, können Sie Folgendes tun:

%Vor%     
Igor Zevaka 27.11.2009 00:10
quelle
0

In Icon können Sie

machen %Vor%

Sie können das auch tun

%Vor%

Siehe auch

polygenelubricants 09.05.2010 05:16
quelle
0

Bin ich der Einzige mit

? %Vor%

zumindest in C, kann jetzt nicht nach Java suchen

    
Adrian Panasiuk 04.10.2012 03:40
quelle
0

Eine komplette Lösung, die auch das Schaltjahr berücksichtigt.

%Vor%     
eosimosu 15.10.2016 10:05
quelle
0

tl; dr

%Vor%

java.time

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.

%Vor%

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%

Über java.time

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 .

    
Basil Bourque 21.06.2017 06:57
quelle
-1

Gehe zum ersten des nächsten Monats und subtrahiere einen Tag.

%Vor%     
user3780656 26.06.2014 19:00
quelle

Tags und Links