Pourquoi mon GregorianCalendar objet de renvoyer le mauvais jour de la semaine?
Mon problème est apparemment très simple. Je fais un calendrier de l'interface utilisateur graphique, à partir d'un GregorianCalendar objet, et utilise des méthodes pour calculer le bon nombre de jours dans le mois, et la date correspondant à des jours de la semaine.
Mais les jours de la semaine sont consistentyl un jour de congé. Le Calendrier des revendications que le 1er juillet 2013 est un '2', qui dans ma partie du monde, ce mardi. Il doit avoir été un '1' pour lundi. "Facile!" je pense que, et de les mettre dans la ligne: c.setFirstDayOfWeek(Calendrier.LUNDI); Mais pas de réaction est donné.
Donc, je recherche stackoverflow pour une réponse, mais tout le monde avec mon problème semble avoir oublié que janvier est 0 et non pas 1. Je n'ai pas. Alors maintenant, je suis coincé.
Comme un simplifyed code, j'ai fait un très court morceau de code, il est correspondant de sortie:
GregorianCalendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.set(Calendar.MONTH, 6);
c.set(Calendar.DAY_OF_MONTH, 1);
c.set(Calendar.YEAR, 2013);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");
System.out.println(sdf.format(c.getTime()));
System.out.println(c.get(Calendar.DAY_OF_WEEK));
et la sortie est:
01-07-2013
2
Je refuse de mettre dans un "-1" dans mon code, à tort, de corriger les symptômes de ce qui est évidemment une erreur. L'aide est appréciée.
2 est lundi... 1 est dimanche... Aussi, setFirstDayOfWeek, selon la doc:
The first week of a month or year is defined as the earliest seven day period beginning on getFirstDayOfWeek() and containing at least getMinimalDaysInFirstWeek() days of that month or year
. Il n'y a pas de obvious mistake
. Juste problème de localisation...Merci. Maintenant, j'ai cessé d'essayer de définir le lundi comme le premier jour de la semaine. Il me semblait plus simple à modifier mon code d'attendre que le dimanche est le numéro 1, peu importe comment illogique, il me semble. Merci pour me dire que mon erreur a été mon interprétation de la setFirstDayOfWeek()-méthode. Qui aurait pu être dur à trouver sur mon propre. Je souhaite que je pourrais l'accepter comme une réponse, mais il semble que c'est seulement posté un commentaire.
Je serais heureux de l'apprendre à poser des questions mieux. Dans ce cas, j'ai certainement raccourcir le code pour inclure uniquement les détails de mon problème. Aussi loin que je peux voir, la seule chose qui manque pour qu'il soit exécutable, est une méthode principale et certaines importations. Mais s'il vous plaît, tous les détails ici serait la bienvenue.
Plus précisément, lire le document lié. Il n'y a plus d'un SSCCE que juste "court", et les choses que vous avez laissé de côté fait le code d'une courte "uncompilable extrait de code" (ou SUCS, si vous le souhaitez), par opposition à un SSCCE.
OriginalL'auteur KjetilNordin | 2013-10-02
Vous devez vous connecter pour publier un commentaire.
L'erreur est votre hypothèse que
Calendar.get(Calendar.DAY_OF_WEEK)
est localisée. Il n'est pas. La correspondance entre les jours de la semaine et le numéro de fixe; utilisationCalendrier.getFirstDayOfWeek()
pour déterminer la compréhension humaine du "premier jour de la semaine" si vous avez besoin d'; je serais surpris si vous avez vraiment envie de montrer à l'utilisateur "2" de toute façon... sûrement, vous voulez leur montrer le nom de la journée de la semaine.Tout calculs impliquant le début de la semaine devrait utiliser
getFirstDayOfWeek
.Idéalement, utilisez
DateFormatSymbols.getInstance(locale).getWeekdays()
.OriginalL'auteur Jon Skeet
Oui, date de la manipulation en Java est problématique...
SUNDAY
étant de 1,SATURDAY
de sept (Ideone violon)c.setFirstDayOfWeek(Calendrier.LUNDI); est un peu différent de ce que le nom suggère
Vous pouvez sortir des ennuis par toujours en utilisant les constantes définies dans le Calendrier de la classe, et n'essaie même pas de déduire le sens de représentations numériques de ces constantes, ou les résultats retournés par la
Calendar.get(int)
méthode...OriginalL'auteur ppeterka
C'est l'une des mises en garde en Java,
DAY_OF_WEEK,
Lorsque votre programme imprime 2, c'est pour vous dire que le jour de la semaine est le LUNDI. Cette valeur de la constante n'a rien à voir avec le début de la semaine. Il n'coïncidence arriver à être le même que le jour de la semaine si le premier jour de la semaine est le DIMANCHE - mais on ne change pas si le premier jour de la semaine est redéfini.
OriginalL'auteur CS Pei