2016-10-11 2 views
0

Je construis un exemple de calendrier Android, mais je suis bizarre quand je travaille avec.La méthode Java get() ne fonctionne pas

J'ai essayé d'obtenir lundi cette semaine que j'ai mis. Cependant, dans ce code

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.DATE, day); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
int start = calendar.get(Calendar.DAY_OF_MONTH); 

Je ne peux pas obtenir une bonne activité. Un symptôme est que je peux obtenir le droit lundi de cette semaine, mais la semaine dernière m'a aussi donné ce lundi, alors j'ai essayé un autre code qui est

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.DATE, day); 
int start = calendar.get(Calendar.DATE); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
start = calendar.get(Calendar.DATE); 

Alors je peux obtenir une activité juste ce que je veux.

Cependant, je ne sais pas pourquoi cela fonctionne et la différence entre ces deux codes.

Merci d'avoir lu et aidé!

+0

vérifier ce lien http: //stackoverflow.com/questions/14118894/how-to-get-day-from-specified-date-in-android –

+0

Gardez à l'esprit que 'Calendar.DATE' vous donne le jour du mois.Si c'était votre intention, il vaut mieux utiliser 'Calendar.DAY_OF_MONTH'. C'est plus concis. – Stefan

Répondre

0

D'abord importan info, le calendrier dispose de deux modes pour interpréter les champs du calendrier, indulgents et non-indulgents. Lorsqu'un calendrier est en mode indulgent, il accepte une plage de valeurs de champ de calendrier plus étendue que celle qu'il produit. Lorsqu'un calendrier recalcule les valeurs de champ de calendrier pour le retour par get(), tous les champs du calendrier sont normalisés. Par exemple, un GregorianCalendar indulgente interprète MOIS == JANVIER DAY_OF_MONTH == 32 comme 1. Février

Lorsqu'un calendrier est en mode non-clément, il lève une exception en cas de contradiction dans ses domaines de calendrier. Par exemple, un GregorianCalendar produit toujours des valeurs DAY_OF_MONTH entre 1 et la longueur du mois. Un GregorianCalendar non indulgent lève une exception lors du calcul de ses valeurs de champ d'heure ou de calendrier si une valeur de champ hors plage a été définie. Une autre information importante, la méthode d'ensemble de calendriers, est de définir la valeur du champ, mais pas de mettre à jour l'heure et de calculer tous les champs (comme l'année, le mois, le jour, etc.) jusqu'à l'utilisation de la méthode get.

Lorsque l'exécution du calendrier en mode clément, voici le code:

Calendar calendar = Calendar.getInstance(); 
calendar.setLenient(true); 
calendar.set(Calendar.DATE, 1); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); 
résultat de l'exécution de code

est 10. Après appel deux jeux mothed, commencez appelez se Calendar.DAY_OF_MONTH, calendrier maintenant commencer à mettre à jour heure, la date 1 et DAY_OF_WEEK du lundi confondez, mais le calendrier est en mode clément, la date finale calculate 10/10/2016, donc obtenir résultat est 10.

même code en mode non-clément:

Calendar calendar = Calendar.getInstance(); 
calendar.setLenient(false); 
calendar.set(Calendar.DATE, 1); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); 

throws java.lang.IllegalArgumentException: exception DAY_OF_MONTH.

dernier code:

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.DATE, 1); 
int start = calendar.get(Calendar.DATE); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
start = calendar.get(Calendar.DATE); 

résultat de l'exécution de code est 26. lorsque premier appel se Calendar.DATE, cet appel updatetime et calculer tous les champs. calculer la date est 2016-10-01 .then appel ensemble (Calendar.DAY_OF_WEEK, Calendar.MONDAY), après cet appel get méthode, calculer la date est 2016-09-26, le résultat est 26.