2017-03-07 4 views
-2

Ich möchte das Datum mit dem aktuellen Datum vergleichen, ohne das Jahr zu berücksichtigen, und ich möchte den Text für jeden Tag ändernWie kann ich ein beliebiges Datum mit dem aktuellen Datum vergleichen, ohne das Jahr zu berücksichtigen?

Hier ist mein Code

TextView textView = (TextView)findViewById(R.id.textView); 

     String valid_until = "7/3"; 
     String valid_until1 = "8/3"; 
     String valid_until2 = "9/3"; 
     String valid_until3 = "10/3"; 

     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM"); 
     Date strDate = null; 
     Date strDate1 = null; 
     Date strDate2 = null; 
     Date strDate3 = null; 


     try { 
      strDate = sdf.parse(valid_until); 
      strDate1 = sdf.parse(valid_until1); 
      strDate2 = sdf.parse(valid_until2); 
      strDate3 = sdf.parse(valid_until3); 


     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     if (new Date() == (strDate)) { 
      textView.setText("7 m"); 
     } 
     if (new Date() == (strDate1)) { 
      textView.setText("8 m"); 
     } 
     if (new Date() == (strDate2)) { 
      textView.setText("9 m"); 
     } 
     if (new Date() == (strDate3)) { 
      textView.setText("10 m"); 
     } 
+0

Duplizieren von: [wie aktuellen Tag und Monat mit bestimmtem Tag und Monat in Java vergleichen] (http://stackoverflow.com/a/39231958/642706) –

Antwort

-1

tl; dr

MonthDay.now(ZoneId.of("America/Montreal")) 
     .equals(MonthDay.of(Month.JULY , 3)) 

Einzelheiten

Se e my Answer auf eine doppelte Frage für Details. Hier kurz zusammengefasst ...

Vermeiden Sie die lästigen alten Legacy-Klassen Date & SimpleDateFormat wie die Pest. Sie wurden von den Klassen java.time verdrängt. Ein Großteil von java.time wurde im ThreeTenABP-Projekt auf Android zurück portiert.

Das aktuelle Datum nicht wiederholt erfassen. Wenn Ihr Code über Mitternacht laufen würde, würden Sie beim Ändern des Datums inkonsistente Ergebnisse erhalten.

Die java.time.MonthDay Klasse löst Ihr Problem, zusammen mit LocalDate und ZoneId.

ZoneId z = ZoneId.of("America/Montreal"); // Zone in which you want the current date. 
LocalDate today = LocalDate.now(z); // Current date for your zone. 
MonthDay mdCurrent = MonthDay.of(today); 
MonthDay mdJulyThird = MonthDay.of(Month.JULY , 3); 
if(mdCurrent.equals(mdJulyThird)) { … } 

Ihr spezielles Problem zu beheben, ich eine Sammlung von Month Enum Objekten und Schleife machen würde. Durchsuchen Sie Stack Overflow nach weiteren Informationen unter EnumSet.

EnumSet<Month> months = EnumSet.range(Month.JULY , Month.OCTOBER); 
for (Month month : months) { 
    MonthDay md = MonthDay.of(month , 3) ; 
    if(md.equals(mdCurrent) { 
     … 
     break; // Break out of the 'for' loop. No need to continue looping. 
    } 
} 

Bei Strings zu erzeugen, rufen MonthDay::format und ein DateTimeFormatter Objekt übergeben. Suche Stack Overflow für viel mehr Informationen über DateTimeFormatter auf viele Hunderte von Fragen & Antworten.

+0

Lieben Hinunter-Voter, bitte Hinterlasse eine Kritik mit deiner Stimme. –

+0

Können Sie mir ein Beispiel zeigen, wie mehrere Tage mit dem aktuellen Datum verglichen werden ... damit ich den Text für jeden Tag ausdrucken kann? Ich brauche das Programm, um die Zeit von Sonnenaufgang und Sonnenuntergang für jeden Tag des Jahres zu zeigen ... –

+0

@ МухаммаднакшубандиОмаров Ich habe bereits gezeigt, mehrere Monats-Tage-Objekte zu vergleichen. Sehen Sie sich den EnumSet-Code an. Und "jeden Tag des Jahres" ist eine andere Frage, die bereits in anderen Fragen zu Stack Overflow gestellt und beantwortet wurde. Siehe die Klasse "Jahr" (https://docs.oracle.com/javase/8/docs/api/java/time/Year.html) und ihre Methoden atDay und Länge. –

Verwandte Themen