Java GregorianCalendar e Calendario perdono i fine settimana, giorni in un mese per agosto e settembre 2010

Sto cercando di utilizzare Calendario o calendario gregoriano per l'iterazione e per creare una griglia di date. Tuttavia, entrambi sembrano pensare che l'agosto 2010 abbia 30 giorni, e che il 2 e il 3 settembre sono i fine settimana. È come se il calendario abbia l'anno sbagliato, ma ho controllato il parametro. Ecco alcuni estratti.

startDate.set(2010, 8, 28); SchedulerCalendar currentDate = (SchedulerCalendar) startDate.clone(); for(int i = 0; i<daysDisplayed; i++){ newDate = new TextView(this); String dateString = currentDate.get(Calendar.MONTH)+"/"+currentDate.get(Calendar.DATE); //+"/"+currentDate.get(Calendar.YEAR); newDate.setText(dateString); newDate.setId(i+1); newDate.setWidth(blockWidth); newDate.setHeight(DATE_HEIGHT); dateBar.addView(newDate); currentDate.add(Calendar.DATE, 1); } private class SchedulerCalendar extends GregorianCalendar { @Override public void add(int field, int value) { super.add(field, value); if(this.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY) { if(value>=0) super.add(Calendar.DATE, 2); if(value<0) super.add(Calendar.DATE, -1); } if(this.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY) { if(value>=0) super.add(Calendar.DATE, 1); if(value<0) super.add(Calendar.DATE, -2); } } } 

  • Attributo di formato "android: drawable" non valido
  • Notifica Android dello schermo distriggersto / triggersto
  • Android Espresso, sveglia il dispositivo prima della prova. Come utilizzare un manifesto personalizzato per il test?
  • Video Android trimming tramite ffmpeg
  • Inserimento Javascript in webview
  • Dagger 2 che inietta il context Android
  • L'altezza LinearLayout in onCreate è 0
  • Android - Animazione della rotazione del marker di mappa intorno all'asse X e Y
  • Gli elementi dell'adattatore di sincronizzazione multipli di Android come Account Google?
  • La preferenza non può lanciare java.lang.boolean in String
  • Come gestisce temporaneamente la perdita di connessione di networking di Android Volley?
  • Come aprire il cassetto di navigazione senza barra di azione, aprire con un solo button
  • 3 Solutions collect form web for “Java GregorianCalendar e Calendario perdono i fine settimana, giorni in un mese per agosto e settembre 2010”

    Sospetto fortemente che non stai tenendo conto del fatto che il mese è basato su 0. Così questo:

     startDate.set(2010, 8, 28); 

    lo stai impostando il 28 settembre 2010. Non hai detto quello che ti aspetti, ma sospetto che tu volessi l'agosto (che è il mese 7 in java.util.Calendar).

    Sospetto che questo sia il problema, dato che il 2 e il 3 ottobre sono sabato e domenica.

    Posso suggerire vivamente di utilizzare Joda Time come API di data e ora invece di java.util {Date, Calendar}? Le classi integrate hanno un sacco di cose come questo.

    Se si desidera continuare ad utilizzare java.util.Calendar , è probabile che si utilizzino anche le costanti Calendar.JANUARY , Calendar.FEBRUARY ecc.

    Come altri hanno già menzionato, potrebbero essere alcuni degli errori comuni "fuori da uno" che questo disegno della biblioteca aiuta a fare. L'API Java è più o less un certo avvolgimento di un timestamp UNIX ispirato in gran parte da alcune librerie C.

    Dovresti alless utilizzare le Enumerazioni appropriate per migliorare la leggibilità e assicurarsi di non passare gli oggetti Data / Calendario ad altri methods che potrebbero funzionare con una rappresentazione immutabile (String, Long, …) dei dati a seconda del caso d'uso.

    Se sei fortemente coinvolto con i tempi, le date ei calendari, dovresti considerare l'utilizzo di JodaTime e cercare JSR 310 , l'API di data e ora che potrebbe apparire in una futura versione di Java.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.