Duvida sobre Calendar

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.

1 curtida