Olá pessoal, estou desenvolvendo um programa que me retorna todos os dias do ano e os respectivos dias da semana.
Porem a minha ideia é que depois de pronto, quando o usuário digitar o ano, exemplo: 2018… o primeiro dia do ano bata exatamente com o dia “real” que foi uma segunda. Ou se o usuário digitar 2017, o dia 01 seja num domingo assim como foi. Existe algum método do calendar que faça isso? Alguma dica?
Olha, existe uma nova API de datas para o java, a partir do java 8, que, na realidade, era a JodaTime.
De qualquer maneira, se quiser mesmo insistir no Calendar, precisar ter em mente que:
a) Os objetos de Calendar sempre estarão representando a data de criação da instância, através do
Calendar cal = Calendar.getInstance();
Que, nada mais é que o momento atual.
b) Sendo que você lê uma String ou inteiro (para o ano), você precisa converter isso para Calendar.
Não tem um meio mais fácil que converter para Date e depois definir a data no calendar
String dataAConverter = "2018";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
Calendar cal = Calendar.getInstance();
Date dataConvertida = sdf.parse(dataAConverter); //Detalhe, essa linha lança um ParseException
cal.setTime(dataConvertida); //Basicamente, 01/01/2018 00:00:00
c) Os objetos de Calendar oferecem o método get, que recebe um inteiro correspondente ao elemento desejado (a própria classe possui constantes para representar o que você quer buscar, seria desejável consultar o javadoc da classe para mais detalhes). Porém, se você vai recuperar o mês, precisa estar ciente que há um pequeno segredo no retorno, a contagem de meses começa em 0,sendo este janeiro e termina em 11, sendo este, dezembro.
Logo, para o caso acima, você teria algo como:
int mes = cal.get(Calendar.MONTH);
E mes teria valor 0;
Acho que são estes pontos que você precisa se ater.