52 votes

Calendrier add () vs roll () quand l'utilisons-nous?

Je connais add() ajoute le spécifiée (signé) quantité de temps donnée pour le champ heure, basé sur le calendrier de règles.

Et roll() ajoute le spécifiée (signé) seule unité de temps sur le champ de temps sans changer de grands champs.

Je ne peux pas penser à une utilisation de tous les jours de l' roll() - je ferais tout ce qui est en add().

Pouvez-vous m'aider avec des exemples de le faire lorsque nous utilisons roll() et quand add()?

EDIT 1

Joda réponses ne sont pas acceptés!

52voto

Bozho Points 273663
  • add() - presque toujours, comme vous l'avez dit
  • roll() - par exemple, vous souhaitez "distribuer" des événements au cours d'un mois. L'algorithme peut consister à traiter un nombre de jours et à placer l'événement, puis à continuer. Lorsque la fin du mois est atteinte, il faut recommencer depuis le début. D'où roll() .

31voto

Menda Points 508

Trouvé dans jGuru

  • Calendrier.rouleau()
    Des changements d'une unité spécifique et des feuilles plus larges " (en termes de temps de mois est 'plus' que le jour) unités inchangé. L'exemple d'API, c'est que date du 31 août 1999, rouler (Calendrier.MOIS, 8), on obtient Le 30 avril 1999. Qui est, la JOURNÉE a été changé pour répondre à avril est maximale, mais les 'plus' de l'unité, de l'ANNÉE, a été inchangé.

  • Calendrier.ajouter()
    Sera la cause de la suivant 'plus grand' unité de changer, si nécessaire. Que, compte tenu de la date de la Le 31 août 1999, add(Calendar.MOIS, 8), on obtient le 30 avril 2000. ajouter() aussi les forces d'un nouveau calcul de millisecondes et dans tous les domaines.

6voto

Tim Points 31

Je posais simplement la même question (c'est comme ça que j'ai trouvé cette page) et quelqu'un sur mon lieu de travail (bien fait, DCK) a proposé une suggestion:

Les sélecteurs de date de nombreux téléphones intelligents (et autres interfaces similaires) "passeront" le jour du 31 au 1er sans modifier le mois, de la même manière pour le champ du mois.

Je ne peux pas penser à un autre guichet automatique d'utilisation et celui-ci pourrait être implémenté d'une autre manière, mais au moins c'est un exemple!

Tim

2voto

ASDF Points 123

Voici un exemple qui ne fonctionnera pas. La condition de la boucle ne sera jamais remplie, car le rôle, une fois atteint le 31 janvier 2014, remontera au 1er janvier 2014.

     Calendar start=new GregorianCalendar();
    start.set(Calendar.YEAR, 2014);
    start.set(Calendar.MONTH, 0);
    start.set(Calendar.DAY_OF_MONTH, 1);
    //January 2, 2014

    Calendar end=new GregorianCalendar();
    end.set(Calendar.YEAR, 2014);
    end.set(Calendar.MONTH, 1);
    end.set(Calendar.DAY_OF_MONTH, 2);
    //February 2, 2014

    while (start.getTime().before(end.getTime())){
        start.roll(Calendar.DATE, 1);
    }
 

1voto

Brian Agnew Points 143181

Je ne suis pas convaincu que l'API de calendrier est un bon candidat pour déterminer les cas d'utilisation. Il est bien connu pour ne pas être particulièrement utile (et quelque peu déroutant). Voir Joda Time pour une meilleure API.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X